我有以下示例代码无法编译:
#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
是否不应该保存由迭代器vi
和ci_start
表示的ci_actual
元素的副本?要将
vi
不断增加的部分传递给我所引用(不存在)的函数,是否可以更快地完成操作而无需将vi
的元素复制到另一个向量中,而只是将引用传递给vi
的一部分? 最佳答案
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)
{
...
}
这段代码可以做到,分析并修复您的错误。
关于c++ - C++如何使用两个迭代器从 vector 复制范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4564267/