1

我想创建向量的向量,使每个子向量具有预定义的容量但未初始化。

这是不做我想做的代码:

#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: 0
tmpVecVec[1] Size: 0, capacity: 0

我想知道如何获得以下结果

tVec Size: 0, capacity: 5
tmpVecVec[0] Size: 0, capacity: 5
tmpVecVec[1] Size: 0, capacity: 5

当然,如果我用 resize 替换 reserve 或在 tVec 的构造函数中提供 size 5,我可以这样做。但是,我可以在不使用这些方法的情况下做到这一点吗?

链接到工作代码:http: //ideone.com/PBXeP

4

3 回答 3

2

如果您想要使用 s 描述的行为,这就是您应该使用vector的。(它可能无法满足您以后提出的所有要求。)

int size = 5, capacity = 5;
vector<vector<int>> tmpVecVec(size);
for (auto& vec: tmpVecVec)
   vec.reserve(capacity);
于 2012-08-18T19:35:56.930 回答
0
#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;
}

输出为 5、10 和 20

于 2012-08-18T19:05:56.727 回答
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

在我的系统上使用 GNU 的 libstdc++ 和 LLVM 的 libc++。

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

于 2012-08-18T19:24:48.020 回答