问候,

我正在尝试使用以下2条缩写代码行(从下面的完整测试应用程序)执行从一个 vector (vec1)到另一 vector (vec2)的复制:

vec2.reserve( vec1.size() );
copy(vec1.begin(), vec1.end(), vec2.begin());

尽管对vec2的调用设置了 vector vec2的容量,但是将数据复制到vec2似乎没有填充从vec1到vec2的值。

用对push_back()的调用替换copy()函数可以正常工作。

我在这里想念什么?

谢谢你的帮助。 vectest.cpp测试程序,然后是结果输出。

编译器:cygwin上的gcc 3.4.4。

纳特
/**
 * vectest.cpp
 */

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<int> vec1;
    vector<int> vec2;

    vec1.push_back(1);
    vec1.push_back(2);
    vec1.push_back(3);
    vec1.push_back(4);
    vec1.push_back(5);
    vec1.push_back(6);
    vec1.push_back(7);

    vec2.reserve( vec1.size() );
    copy(vec1.begin(), vec1.end(), vec2.begin());

    cout << "vec1.size()     = " << vec1.size() << endl;
    cout << "vec1.capacity() = " << vec1.capacity() << endl;

    cout << "vec1: ";
    for( vector<int>::const_iterator iter = vec1.begin(); iter < vec1.end(); ++iter ) {
        cout << *iter << " ";
    }
    cout << endl;

    cout << "vec2.size()     = " << vec2.size() << endl;
    cout << "vec2.capacity() = " << vec2.capacity() << endl;
    cout << "vec2: ";
    for( vector<int>::const_iterator iter = vec2.begin(); iter < vec2.end(); ++iter ) {
        cout << *iter << endl;
    }

    cout << endl;
}

输出:
vec1.size()     = 7
vec1.capacity() = 8
vec1: 1 2 3 4 5 6 7
vec2.size()     = 0
vec2.capacity() = 7
vec2:

最佳答案

如其他答案和评论中所述,您应该只使用vector的内置功能。但:

当您reserve()元素时, vector 将为(至少?)足够多的元素分配足够的空间。 vector 中不存在这些元素,但可以使用内存了。然后,这可能会加快push_back()的速度,因为已经分配了内存。

当您对 vector 进行resize()编码时,它将为这些元素分配足够的空间,但也会将它们添加到 vector 中。

因此,如果将 vector 的大小调整为100,则可以访问元素0-99,但是如果保留100个元素,则尚未插入它们,只是可以使用。

您想要的是这样的:

vec2.reserve( vec1.size() );
copy(vec1.begin(), vec1.end(), std::back_inserter(vec2));

std::back_inserter <iterator> 中定义

关于c++ - STL vector reserve()和copy(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1128535/

10-11 22:30
查看更多