繁体   English   中英

stl object c++ 的向量容器

[英]stl container of vectors of object c++

我有 class 和一些对象向量,还有很多处理这些向量的方法。 所以我的伪代码是这样的:

method1(std::vector1);
method1(std::vector2);
.
.
.
method2(std::vector1);
method2(std::vector2);
.
.
.
(etc.)

每次将新的对象向量添加到我的 class 时,我都必须记住向所有方法添加新行。 所以我开始考虑可以存储所有对象的新容器。 我制作了一个新的 class ,其中包含一个存储我所有对象向量的容器。 此外,所有向量都移至新的 class。 我希望每次我需要一个新向量并在我的所有方法中遍历所有这些向量时,都可以向该 class 添加新向量,如下所示:

method1()
{
  for(auto& temp : container)
  {
    ...
  }
} 

在我的新 class 中是这样的:

vector<object>& getByIndex(size_t index) 
{
   return container[index]
}

我需要通过引用返回 object 的向量,因为我需要对这些对象进行一些操作。 所以...我在问我应该使用什么容器? 以及如何完成? 也许有更好的解决方案。 这只是我想出的主意。 我在考虑 std::list 因为这些向量正在改变它们的大小,所以有很多重新分配。 我不想用 std::vectorstd::vector<object> 扼杀我的表现。

此外,如果列表没问题,我需要一些帮助,因为我已经尝试过使用列表:

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的 model 应该足以理解为什么是:

template <typename T>
struct fake_vector {
    T* data;
    // ... other stuff ...
};

无论data指向一个有 10 个元素、42 个还是 10000 个元素的数组,向量 object 的大小始终相同。

通常,给定类型的实例总是具有相同的大小。 这就是为什么您可以拥有 arrays 对象的原因。

对于问题的最后一部分,您需要展示一个完整的示例,但使用向量向量,该方法将只是:

std::vector<object>& getByIndex(size_t index)
{ 
    return data[index];
}

通常扁平的std::vector<T>std::vector<std::vector<T>>更好,因为std::vector是它的数据局部性(元素存储在连续的内存中),并且因为std::vector添加了间接级别,所以该数据局部性在嵌套向量中丢失(只有内部向量元素存储在连续内存中)。 但是,如果您只处理内部向量,那么这可能不是一个真正的缺点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM