C++ 使用保留容量初始化嵌套向量的子向量

C++ 使用保留容量初始化嵌套向量的子向量,c++,stl,vector,C++,Stl,Vector,我想创建向量向量,这样每个子向量都有一个预定义的容量,但没有初始化 以下是我不想做的代码: #include <iostream> #include <vector> using namespace std; int main() { vector<int> tVec; tVec.reserve( 5 ); cout<<"tVec Size: "<<tVec.size()<<", capacity

我想创建向量向量,这样每个子向量都有一个预定义的容量,但没有初始化

以下是我不想做的代码:

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<int> tVec;
    tVec.reserve( 5 );
    cout<<"tVec Size: "<<tVec.size()<<", capacity: "<<tVec.capacity()<<endl;

    vector< vector<int> > tmpVecVec( 2, tVec );
    cout<<"tmpVecVec[0] Size: "<<tmpVecVec[0].size()<<", capacity: "<<tmpVecVec[0].capacity()<<endl;
    cout<<"tmpVecVec[1] Size: "<<tmpVecVec[1].size()<<", capacity: "<<tmpVecVec[0].capacity()<<endl;
}
我想知道怎样才能得到下面的结果

tVec Size: 0, capacity: 5
tmpVecVec[0] Size: 0, capacity: 5
tmpVecVec[1] Size: 0, capacity: 5
当然,如果我用resize替换reserve,或者在tVec的构造函数中提供大小5,我可以这样做。但是,我可以不用这些方法来做吗

工作代码链接:

#包括“stdafx.h”
#包括
使用名称空间std;
int main()
{
vectorbaz(5);
baz.保护区(5);
baz[0].储量(10);
baz[0].储量(20);
printf(“%i”,baz.capacity());
printf(“%i”,baz[0].capacity());
printf(“%i”,baz[1].capacity());
getchar();
返回0;
}

输出是5、10和20,这是由库的实现定义的,所以不是很好,但它可能适用于小元素计数:

vector<int>tVec(5, 0);
cout << "tVec Size: " << tVec.size() << ", capacity: " << tVec.capacity() << endl;
vector<vector<int> >tmpVecVec(2, tVec);
tmpVecVec[0].clear();
tmpVecVec[1].clear();
cout << "tmpVecVec[0] Size: " << tmpVecVec[0].size() << ", capacity: " << tmpVecVec[0].capacity() << endl;
cout << "tmpVecVec[1] Size: " << tmpVecVec[1].size() << ", capacity: " << tmpVecVec[0].capacity() << endl;
在我的系统上使用GNU的libstdc++和LLVM的libc++


但是我认为reserve()是更好的方法。

如果您想要使用
向量
s描述行为,那么应该使用这一方法。(它可能无法满足您以后提出的所有要求。)

int size=5,容量=5;
向量tmpVecVec(大小);
用于(自动和矢量控制:tmpVecVec)
车辆储备(容量);

我想你做不到。不管是好是坏,
vector
没有允许您请求初始容量的构造函数。据我所知,STL无法实现这一点。可以用Boost或其他方法来完成吗?@nurav,在这种情况下,Boost对
vector
没有什么帮助。我不明白为什么你会对这个算法提出这样的要求,因为它只需要一两行代码就可以保留所有向量的容量。实际上,我为什么要这样做,这样我就可以用push-back填充子向量。考虑具有百万个子向量的向量。如果每个子向量都有一个预先分配但未初始化的x个位置的内存,那么我可以使用push_back填充每个子向量,而不会导致重新分配/重新复制,只要每个子向量推送的元素数小于保留容量x。@nurav,我不认为您的要求有什么奇怪之处;我(可能错误地)解释说,您不想单独保留每个子向量,这就是我认为您应该如何解决这个问题的。
#include "stdafx.h"
#include<vector>
using namespace std;
int main ()
{
    vector<vector<int>>baz(5);
    baz.reserve(5);
    baz[0].reserve(10);
    baz[0].reserve(20);

    printf(" %i ",baz.capacity());
    printf(" %i ",baz[0].capacity());
    printf(" %i ",baz[1].capacity());
    getchar();
    return 0;
}
vector<int>tVec(5, 0);
cout << "tVec Size: " << tVec.size() << ", capacity: " << tVec.capacity() << endl;
vector<vector<int> >tmpVecVec(2, tVec);
tmpVecVec[0].clear();
tmpVecVec[1].clear();
cout << "tmpVecVec[0] Size: " << tmpVecVec[0].size() << ", capacity: " << tmpVecVec[0].capacity() << endl;
cout << "tmpVecVec[1] Size: " << tmpVecVec[1].size() << ", capacity: " << tmpVecVec[0].capacity() << endl;
tmpVecVec[0] Size: 0, capacity: 5
tmpVecVec[1] Size: 0, capacity: 5
int size = 5, capacity = 5;
vector<vector<int>> tmpVecVec(size);
for (auto& vec: tmpVecVec)
   vec.reserve(capacity);