我有这个无法编译的示例代码:
#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;
}
}
我想要的是将 vector 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
的元素复制到另一个 vector 并且只是传递对 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)
关于c++如何使用两个迭代器从 vector 复制范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4564267/