C++ 在向量c+上高效迭代+;

C++ 在向量c+上高效迭代+;,c++,vector,iteration,c++14,C++,Vector,Iteration,C++14,我有n向量,我需要一致地迭代所有向量 我的意思是,首先我需要迭代第一个向量的所有元素,然后迭代第二个向量的所有元素,依此类推 我的任务是一致地比较所有元素,包括k-1第个向量的最后一个元素和k第个向量的第一个元素 我知道这个解决方案,我首先把所有这些向量集中在一个大的最终向量中,然后在最终向量上迭代。 但在我看来,这个解决方案浪费了大量的内存和时间 请帮助我找到更优化的解决方案。 如果存在的话 例如,对于复杂性:O(1)额外的内存和O(n)时间。如果您只需要可以迭代的东西,您可能需要类似的东西

我有
n
向量,我需要一致地迭代所有向量

我的意思是,首先我需要迭代第一个向量的所有元素,然后迭代第二个向量的所有元素,依此类推

我的任务是一致地比较所有元素,包括
k-1
第个向量的最后一个元素和
k
第个向量的第一个元素

我知道这个解决方案,我首先把所有这些向量集中在一个大的最终向量中,然后在最终向量上迭代。 但在我看来,这个解决方案浪费了大量的内存和时间

请帮助我找到更优化的解决方案。 如果存在的话


例如,对于复杂性:
O(1)
额外的内存和
O(n)
时间。

如果您只需要可以迭代的东西,您可能需要类似的东西

给定N个源范围,生成一个结果范围,该范围是所有源范围的串联

这不会复制任何值,O(1)存储和O(1)时间也是如此


如果您需要的正是
std::vector
,那么您就不走运了,您必须用所有的值填充一个向量。

一个简单的方法是使用两个嵌套循环

在C++11及更高版本中,只需执行以下操作

std::vector<std::vector<int> > vec;
 // some code that sets up the vectors in vec

for (auto &v : vec)     // iterate over the vectors in vec
{
     for (auto &e : v)   // iterate over the elements of v
     {
          //  do whatever is needed to element e
     }   
}

请注意,在此表单中需要取消对迭代器的引用。

您的尝试在哪里?你是如何存储你的
向量的(为什么有这么多)?你到底想比较什么?另外,你似乎用了“一致性”这个词是错误的,至少我不明白你在试图纠正什么样的不一致。你需要找到相等的向量吗?我试图找到共同的解决方案。当存在
n
向量时,我们需要迭代。也许我误解了你的问题,但你似乎可以简单地使用两个嵌套循环来迭代向量中的元素——外部一个用于向量,内部一个用于元素。@Gusev Slava,如果是这样,你需要一个可变模板函数
for (std::vector<std::vector<int> >::iterator v(vec.begin()), vend(vec.end());
     v != vend; ++v)
{
     for (std::vector<int>::iterator e(v->begin()), eend(v->end());
            e != eend; ++e)
     {
          //  do whatever is needed to element *e
     }   
}