[英]How to fix error “vector iterators in range are from different containers” in c++?
[英]c++ how to copy range from vector using two iterators
我有以下示例代码无法编译:
#include <iostream>
#include <vector>
using std::endl; using std::cin; using std::cout;
using std::vector;
int main()
{
vector<int> vi, seg;
vi.push_back(3);
vi.push_back(4);
vi.push_back(5);
vi.push_back(6);
vi.push_back(7);
vector<int>::const_iterator ci_start = vi.begin();
vector<int>::const_iterator ci_actual = vi.begin();
while (ci_actual != vi.end())
{
seg = vi(ci_start, ci_actual);
cout << "......" ;
for (const vector<int>::const_iterator ci = vi.begin();
ci != vi.end(); ++ci)
cout << *ci << " ";
cout << endl;
++ci_actual;
}
}
我想要的是将向量vi
递增部分(将要花费数百万个元素)传递给一个函数(未显示)。 从vi
的开始到目前的actual
位置,都考虑了这些段。
为此,我声明了应该包含vi一部分的seg
。
所需的输出为:
3
3 4
3 4 5
3 4 5 6 3 4 5 6 7
seg
是否不应该保存由迭代器ci_start
和ci_actual
表示的vi
元素的副本?
要将vi
不断增加的部分传递给我引用的函数(不存在),我可以更快地做到这一点,而无需将vi
的元素复制到另一个向量,而仅将引用传递给vi
吗?
for (const vector<int>::const_iterator ci = vi.begin(); ci != vi.end(); ++ci)
您在这里声明const const_interator。 意思是当您尝试调用++ ci时,编译器会对您尝试修改常量变量大喊大叫。 这应该修复该编译器错误:
for (vector<int>::const_iterator ci = vi.begin(); ci != vi.end(); ++ci)
如果您遇到编译器错误,请告诉我们它是什么。 看起来像这样:
seg = vi(ci_start, ci_actual);
应该
vector<int> seg(ci_start, ci_actual);
并删除main()顶部的seg声明。
如果要打印段,您的for循环应使用seg.begin()/ seg.end()
回复:关于如何调用要在大向量的子范围上进行操作的辅助函数的后续问题...
首先, 这个stackoverflow问题可能有用。 公认的“只需通过一对迭代器”答案就是我要建议的。
其次,如果可以使用Boost库,则矢量代理库可能会很有用。
int main()
{
vector<int> vi;
vi.push_back(3);
vi.push_back(4);
vi.push_back(5);
vi.push_back(6);
vi.push_back(7);
//the end of the sequence
vector<int>::iterator seq_end = vi.begin() + 1;
while (seq_end != vi.end())
{
cout << "......" ;
for (vector<int>::iterator ci = vi.begin(); ci != seq_end; ++ci)
cout << *ci << " ";
cout << endl;
any_function(vi.begin(), seq_end);
++seq_end;
}
}
void any_function(const vector<int>::iterator& seq_start,
const vector<int>::iterator& seq_end)
{
...
}
这段代码可以做到,分析并修复您的错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.