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

もちろん、予約をサイズ変更に置き換えるか、tVecのコンストラクターでサイズ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 に答える