我有以下示例代码无法编译:

#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是否不应该保存由迭代器vici_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/

10-11 22:02
查看更多