插入到向量c++

inserting into vectors c++

本文关键字:c++ 向量 插入      更新时间:2023-10-16

我需要推送66,000个向量(向量的数量不是固定的,它也可以是90,000个向量)。为了简洁起见,我将下面的代码(以66,000个向量为例)显示为vector类型的以下向量:

vector<int> vec;

66000个向量中每个向量的大小是9000个元素。我使用下面的代码来做同样的事情:

vec.reserve(66000*9000);
for(int j=0;j<66000;j++)
    for(int i=0;i<9000;i++) //9000 elements in vec1[i] per vector is not fixed
        vec.push_back(vec1[i]); //i am pushing i as an example

是否有某种方法可以提高这段代码的效率?

我需要连接太多的向量,所以相同的解决方案可能不同于连接两个向量。此外,我不能使用多线程在前面的问题中提到的

试试下面的

std::vector<int> vec;
vec.reserve( 66000*other_vec.size() );
for ( size_t i = 0; i < 66000; i++ ) 
{
    vec.insert( vec.end(), other_vec.begin(), other_vec.end() );
}

您可以使用resize()代替reserve()。当使用resize()时,去除push_back。内存由resize()分配并初始化。reserve只分配,不初始化

您可以通过data():

直接访问底层数据。http://en.cppreference.com/w/cpp/container/vector/data

那么你可以直接复制数据(例如只是memcpy)。

std::vector<int> foo;
for (int i=0; i<10;++i){
    foo.push_back(i);
}
std::vector<int> bar;
bar.resize(10*10);
int pos = 0;
int size = foo.size()*sizeof(int);
for (int i=0; i<10; ++i){
    memcpy(bar.data()+pos/sizeof(int),foo.data(),size);
    pos += size;
}

for (size_t i=0; i<bar.size(); ++i){
    cout << i << " " << bar[i] << endl;
}