0

C ++はわかりませんが、継承したコードを調整する必要があります。コードの一部には次のものがあります。

  array<vector<string>, 2> names;

現在、この配列の各ベクトルの内容を出力しようとしています。どうすればそれを行うことができますか?

私は次のように1つのベクトルを反復できることを知っています:

  for (unsigned int p=0; p<vector.size(); p++)
      cout << vector.at(p) << endl;

ただし、これを調整して配列内の各ベクトルの内容を出力する方法がわかりません。

あなたが提供できるどんな助けにも感謝します。私はここで私の要素から外れています。

4

4 に答える 4

2

C ++ 11では、これを非常に簡単に繰り返すことができます。

for(auto& i : names) {
    for(auto& k : i) {
        std::cout << k << std::endl;
    }
}
于 2013-02-14T04:07:58.200 に答える
0

ベクトルを反復処理するのと同じように、配列を反復処理する必要があります。

for (int i=0; i<2; i++)
 {
   for (unsigned int p=0; p<names[i].size(); p++)
   {
        cout << names[i].at(p) << endl;
   }
 }

または

for (auto it = std::begin(names); it != std::end(names); ++it)
 {
   for (unsigned int p=0; p<(*it).size(); p++)
   {
        cout << (*it).at(p) << endl;
   }
 }
于 2013-02-14T03:59:15.430 に答える
0

イテレータの使用:

array<vector<string>,2> names;

for (array<vector<string>,2>::iterator i=names.begin();i!=names.end();i++)
{
  for (vector<string>::iterator j=i->begin();j!=i->end();j++)
  {
    cout << *j << endl;
  }
}
于 2013-02-14T04:00:15.133 に答える
0

for1行の解決策(この場合、Rapptzの回答のように手動で反復する方が読みやすいため、必ずしも望ましいとは限りませんが、それでも知っておくと便利です):

std::for_each(names.begin(), names.end(), [](vector<string>& v){
              std::copy(v.begin(),v.end(),
                        std::ostream_iterator<string>(std::cout,"\n")});
于 2013-02-14T04:13:09.833 に答える