0

それで、

ベクトルの内容を出力しようとしています。私はそれのためにイテレータを試しましたが、それは良くありません

for(vector<char**>::const_iterator i=myVec.begin();i!=myVec.end();i++) {
   cout<<**i<<endl;
}

これは機能しません。私が考えているのは、2 つのイテレータが必要になるということです (上の 1 つは外側のイテレータで、内側のイテレータは次のようになります。

  for(vector<char*>::const_iterator j=???;j!=??;j++) {....}

しかし、私はそれを機能させることができませんでした。

ありがとう。

4

1 に答える 1

1

ここでうまくいくようです:

#include <iostream>
#include <vector>

int main()
{
    const char* sentence1[] = {"foo", "bar", "baz"};
    const char* sentence2[] = {"xyzzy", "frob", "plugh"};
    std::vector<const char**> vec = {sentence1, sentence2};

    for (auto i : vec) {
        for (size_t w = 0; w < 3; ++w) {
            std::cout << i[w] << ' ';
        }
    }
    std::cout << '\n';
}

これは印刷されます:

foo bar baz xyzzy フロブ プラグ

上記はC++11です。それがない場合は、ベクトルの初期化とforループを変更する必要があります。

std::vector<const char**> vec;
vec.push_back(sentence1);
vec.push_back(sentence2);

for (std::vector<const char**>::iterator it = vec.begin();
     it != vec.end(); ++it)
{
    for (size_t w = 0; w < 3; ++w) {
        std::cout << (*it)[w] << ' ';
    }
}

ご想像のとおり、各文で同じ量の単語を想定する必要があります。それが望ましくない場合は、文のベクトルと一緒に文ごとの単語数も保持する新しいデータ構造を作成できます。

マゾヒストであることは良い練習になりますが、実際にはベクトルに切り替えて、単語をより簡単に反復できるようにする必要があります。

于 2013-02-16T06:52:27.673 に答える