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
}
}