2016-04-26 15 views
2

2次元文字列ベクトル(つまりベクトル内のベクトル)の理解を深めようとしており、数時間の苦労を経て、外側ベクトル。C++ - 2次元文字列ベクトルの外側ベクトルのサイズを増やす

最初の内部要素{"ABC"、 "Abacus"、 "Abacus Football Club"、 "001"}に次の値を追加することから始めます。

もう1つの外側要素を追加し、最初の値として「BCD」を追加したいと思います。多くの失敗した試みの後、私は外側のベクトルのサイズを増やすことができません。私は私が持っている "最も近い"と感じる以下を提示する。コンパイルしようとすると

#include <iostream> 
#include <string> 
#include <vector> 
using namespace std; 

int main() 
{ 

    vector< vector<string> > vecTeams(1, vector<string>(4)); 

    vecTeams[0][0] = "ABC"; 
    vecTeams[0][1] = "Abacus"; 
    vecTeams[0][2] = "Abacus Football Club"; 
    vecTeams[0][3] = "001"; 

    cout << vecTeams[0][1] << endl; 

    vecTeams.push_back(1); 
    vecTeams[1][0] = "BCD"; 

    cout << vecTeams[1][0] << endl; 

    return 0; 
} 

それが好きではない:

vecTeams.push_back(1); 

それは私が誤解していますし、どのように私はベクトルのサイズを増やすため、データを追加し続けることができることは何ですか?

多くのおかげで、

ホセ・

+0

ベクトルのベクトルを考えてみましょう。だからあなたは 'push_back()'を使っていくつかの要素で内側のベクトルを塗りつぶしてから、 'push_back'ではなく外側のベクトル –

+1

に' push_back(inner vector) 'を全体として' resize'を使うことをお勧めします。 – Spencer

+0

新しいベクトルのコンストラクタに1を転送し、サイズ1の内部ベクトルを作成するつもりならば、vecTeams.emplace_back(1);でそれを行うことができます。 –

答えて

2

vecTeams以降はその後、論理的に、それはあなたがそれに追加する必要があるものだ、std::vector<std::string> Sを含むコンテナです。

vecTeams.push_back(std::vector<std::string>()); 

push_back()のパラメータコンテナに追加する新しい値の数ではなく、コンテナの末尾に追加する新しい値です。コンテナにはstd::vector<std::string>が含まれているため、新しいものを作成して戻す必要があります。

また同じことを達成するためにresize()を使用することができます。

vecTeams.resize(2); 

は今、コンテナ内の2つの要素があります。

1

push_backの引数はプッシュするベクトルです。 1はベクターではありません。

あなたは使用することができますおそらく

vecTeams.push_back(vector<string>(4)); 

か:

vecTeams.resize(2); 
vecTeams[1].resize(4); 

を別の方法として、あなたがそれを押す前に、それぞれの行を作成することができます。

vector< vector<string> > vecTeams; 
vector<string> team; 

team = { "ABC", "Abacus", "Abacus Football Club", "001" }; 
vecTeams.push_back(team); 

team = { "BCD", "bla", "bla", "002" }; 
vecTeams.push_back(team); 

を実際にあなたも必要ありません。このコードでteamを使用している場合は、補強リストをpush_back ca ll。

すべての行に4つの文字列が含まれる場合は、std::array<string, 4>を行タイプとして使用するか、structを使用することを検討してください。