c++ - 函数指针与直接调用 cout

标签 c++ map

我正在处理 C++ 类作业,我需要一些输入。我不是在为我的作业寻求“帮助”,而是以类作业为借口来练习编写“好”代码,并且我正在就我正在处理的当前问题的两种解决方案进行辩论。

我在 STL 映射中存储了大约 4000 个值。这个程序的一个特点是打印出我 map 中的每个值。我有一个名为“驱动程序”的类,它处理应用程序的内部逻辑并保存对 map 的引用。我有一个单独的用户界面类。

我要做的是将一个函数指针传递给我的驱动程序,它遍历映射并回调到我的 UI 类中的函数。在大约 4000 次函数调用时,这在性能方面是不是一个坏主意?我应该硬着头皮在迭代时简单地调用 cout 吗?我对此犹豫不决,因为我试图让我的用户界面与我的程序逻辑和数据完全隔离。我知道最终这真的无关紧要,因为它只是一个类作业,但假设这是我希望长期维护的代码,这里的“最佳”实践是什么?

最佳答案

简短回答:别担心。 4k 间接调用没什么大不了的。如果您担心性能,请执行以下操作:

  • 用简单的方式编码
  • 表现好吗?完成。
  • 表现不好?使用分析器,例如 gprof , 找出原因,然后只修复需要的部分

请记住,“过早的优化是万恶之源”。

稍长的版本:您可以按如下方式定义回调:

template <typename IteratorType>
void my_multi_callback(iterator start, iterator end);

然后,驱动程序可以传递适当的 map 迭代器(描述要打印的范围)。回调然后为每个元素执行输出,因此您避免了重复的间接函数调用。

关于c++ - 函数指针与直接调用 cout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5190525/

相关文章:

c++ - 重载两个类的提取运算符

C++ 函数不适用于我的两个变量

c++ - fstream - 无法访问类 basic_fstream<_Elem, _Traits> 中声明的私有(private)成员

Go 中的结构映射与结构数组

按值对 map 内的 map 进行排序

c++ - read() 不返回指定数量的字节

scala - 在 Scala 中将 Map[String, String] 转换为 Map[String, Int]

android - Arcgis : how to get device location

C++ std::map<std::string, int> 获取键以特定字符串开头的值

c++ - 如何使用 GTK+ 设置 CMakeLists?