我需要一个容器容器,例如:
class Widget {
...
};
...
std::vector<std::list<Widget> > widgets;
因为STL容器复制其中的对象,复制一个容器不是一个廉价的操作,我认为这个容器的容器可能会导致非常糟糕的效率,因此是一个糟糕的设计。 我想知道我是否正确。如果是,我应该使用容器指针容器还是其他东西? 谢谢
附注
谢谢你们,现在我知道它是否是一个糟糕的设计取决于我如何使用它。
因此,如果我知道有多少 list
(最多)会被插入到 vector
中,然后使用 vector::reserve
来避免 vector
reallocation 之后我只查询其中的对象,这可能是一个很好的设计。
另一方面,如果我需要不时地将 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/