对象 C++ 向量的 STL 容器
stl container of vectors of object c++
>我有一些对象向量的类,还有很多处理这些向量的方法。所以我的伪代码看起来像这样:
method1(std::vector1);
method1(std::vector2);
.
.
.
method2(std::vector1);
method2(std::vector2);
.
.
.
(etc.)
每次将新的对象向量添加到我的类中时,我都必须记住为所有方法添加新行。所以我开始考虑可以存储所有这些对象的新容器。我创建了一个带有容器的新类,该容器存储了我所有的对象向量。还有移动到该新类的所有向量。我希望每次需要新向量时都可以向该类添加新向量,并在我的所有方法中遍历所有这些向量,如下所示:
method1()
{
for(auto& temp : container)
{
...
}
}
在我的新课上,类似的东西:
vector<object>& getByIndex(size_t index)
{
return container[index]
}
我需要通过引用返回对象的向量,因为我需要对这些对象执行一些操作。 所以... 我问我应该使用什么容器?怎么做呢?也许有更好的解决方案。这只是我想出的想法。我在考虑std::list,因为这些向量正在改变它们的大小,所以有很多重新分配。我不想用 std::vectorstd::vectorstd::vector
另外,如果列表没问题,我需要一些帮助,因为我已经尝试过列表:
std::vector<object>& getByIndex(size_t index)
{
return (*std::next(m_container.begin(), index));
}
但它不起作用。使用我从getByIndex方法返回的内容作为其参数的方法不会向m_container添加内容。好像它是通过值而不是引用返回的。也许我对从该方法返回的内容有误?我将不胜感激任何帮助。
您要查找的容器是std::vector
。
我在考虑std::list,因为这些向量正在改变它们的大小,所以有很多重新分配。
添加元素时,std::vector
不会更改其大小。std::vector::size()
返回元素数,但sizeof(some_vector)
是常数。一个极其简化的std::vector
模型应该足以理解原因:
template <typename T>
struct fake_vector {
T* data;
// ... other stuff ...
};
无论data
指向包含 10 个元素、42 个元素还是 10000 个元素的数组,矢量对象的大小始终相同。
在一般情况下,给定类型的实例始终具有相同的大小。这就是为什么你可以拥有对象数组的原因。
对于问题的最后一部分,您需要展示一个完整的示例,但是对于向量向量,该方法只需:
std::vector<object>& getByIndex(size_t index)
{
return data[index];
}
通常,平面std::vector<T>
比std::vector<std::vector<T>>
更好,因为std::vector
的最大优点是其数据局部性(元素存储在连续内存中(,并且由于std::vector
增加了间接级别,因此此数据局部性在嵌套向量中丢失(只有内部向量元素存储在连续内存中(。但是,如果您只处理内部向量,那么这可能不是一个真正的缺点。
- 在STL容器中使用模板类
- 检查函数返回类型是否与STL容器类型值相同
- 为什么 STL 容器适配器堆栈中的 top 返回常量引用?
- 如果我真的真的想从 STL 容器继承,并且我继承构造函数并删除新运算符,会发生什么?
- 对象 C++ 向量的 STL 容器
- 如何在不破坏现有应用程序的情况下更改 API 中 stl 容器的数据类型?
- 在 STL 容器的 STL 容器上调用 clear
- "迭代器"和"const_iterator"不是 STL 容器的必需成员?
- 删除包含包含动态对象的 STL 容器的智能指针
- C++:在子类中扩展静态 STL 容器/映射成员?
- ostream 运算符<< 为获取 STL 容器而过载,传递 std::string 会破坏它?
- 没有 STL 容器的迭代器
- 为什么某些 STL 容器(堆栈、队列、优先级队列)不支持迭代器?
- 接受任何 STL 容器的函数
- C++ STL 容器中优先级搜索的优雅方法
- 我们如何打印出C++ STL 容器的value_type?
- 获取嵌套 stl 容器的大小(以字节为单位)
- 如何在C++中重新实现包含指针的 STL 容器的类的迭代器
- 迭代器和 STL 容器的关系
- 如何用索引增量generate_n填充STL容器