c++如何使用两个迭代器从 vector 复制范围

标签 c++ vector iterator copy

我有这个无法编译的示例代码:

#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_startci_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/

相关文章:

rust - 如何为迭代器写trait&impl with lifes?

c++ - 哪些文件属于 CDT 托管构建中的构建目标?

C++ 迭代 vector 返回甚至不在 vector 中的对象

python - 生成生成器时如何压平 yield ?

c++ - 为什么类 .setTexure() 方法的行为不同?

c++ - 从 vector 和 QVBoxLayout 中删除

c++ - 共享库中的回溯函数

c++ - 在数组搜索中返回迭代器索引

C++:如何在协变返回类型中重用代码?

c++ - 如何重置函数内的静态 vector ?