c++ - 容器的容器是一个糟糕的设计吗?

标签 c++ containers

我需要一个容器容器,例如:

class Widget {
  ...
};
...
std::vector<std::list<Widget> > widgets;

因为STL容器复制其中的对象,复制一个容器不是一个廉价的操作,我认为这个容器的容器可能会导致非常糟糕的效率,因此是一个糟糕的设计。 我想知道我是否正确。如果是,我应该使用容器指针容器还是其他东西? 谢谢

附注

谢谢你们,现在我知道它是否是一个糟糕的设计取决于我如何使用它。

因此,如果我知道有多少 list(最多)会被插入到 vector 中,然后使用 vector::reserve 来避免 vectorreallocation 之后我只查询其中的对象,这可能是一个很好的设计。

另一方面,如果我需要不时地将 list 插入到 vector 中,这可能会导致非常糟糕的效率。

我说得对吗?

最佳答案

这不是糟糕的设计。您使用它的方式可能是糟糕的设计。如果您的代码需要频繁的深度复制并且您实现了 std::vector<std::list<Widget> *> widgets ,但仍然需要深拷贝,与您所做的没有太大区别。

例如,如果您正在查询 list 的某个成员s 在 vector 中非常频繁,这实际上可能是一个很好的设计,因为 vector 的紧凑性导致内存接近。

具有移动语义的支持 C++11 的现代编译器通常移动数据而不是复制数据。所以我不会太在意 vector 重定位或移位。 “移动”仍然可以由旧编译器使用 std::swap 完成只要它比复制更有意义。

关于c++ - 容器的容器是一个糟糕的设计吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9580614/

相关文章:

c++ - 使用#include <boost/algorithm/string.hpp> 的问题

c++ - 进行少量插入时应该使用哪个 STL 容器?

c++ - 是否允许指针作为有序 STL 容器中的键?

rust - 有哪些方法可以创建多种类型的容器?

azure - 如何从 Azure blob 容器获取所有/部分文件 (CloudBlockBlob)?

c++ - 如何在没有数组的情况下从文件中读取不同大小行的变量

c++ - VS 2010 目录结构

c++ - 如何在 Visual Studio C++ 2010 中将 BSTR 转换为 std::string?

css - 如何将图像 div 容器放在另一个 div 上,但保持可点击?

c++ - 扩展 C++ 字符串成员函数