2016-10-08 8 views
0

私はベクトル(文字列)ブックと単語リストconst char ** liste mywordsを使用します。私は本を​​埋めるpush_back()メソッドを知っています。しかし、私は本の冒頭に各単語を挿入したいと思います。私はこれを試してみるが、なぜその本がまだ空であるのか分からない。C++ insert()メソッドを使用して文字列ベクトルの先頭に単語を挿入するvector <>

vector<string>::iterator begin=book.begin(); 
vector<string>::iterator end=book.end(); 
vector<string>::iterator pos = book.insert(begin, *mywords); 
vector<string>::reverse_iterator rit=book.rbegin(); 

while (*mywords !=NULL) { 
    for (rit=book.rbegin();rit != book.rend(); ++ rit) 
    dico.insert(pos, begin, end); 
mywords++; 
} 
+0

[最小限で完全であり、検証可能な例](http://stackoverflow.com/help/mcve)を作成してください。 –

+0

'const char **'にはC++がありません。 – IInspectable

+0

'dico'とは何ですか?それはどこから来たのですか? –

答えて

0
示すコードで

posbegin、及びendは、bookの全てイテレータです。

dico.insert(pos, begin, end); 

これはdicoと呼ばれるいくつかの神秘的なコンテナで、いくつかの目的のために、これらのイテレータを使用しようとします。

ほとんどのコンテナのinsert()メソッドは、通常、同じコンテナのイテレータを使用します。 posdicoイテレータではありません。このように、これはおそらく未定義の動作です。

+0

>申し訳ありませんが、いくつかの間違いがあります。 dico.insert(pos、begin、end)ではなく、book.insert(pos、begin、end)です。 – Marie

+0

私はconst ** charをベクトルの本を反復して入れました。 – Marie

+0

その場合、 'insert()'は 'vector'の既存のイテレータをすべて無効にします。最初の挿入後、これらのイテレーターは有効ではなく、これ以上のイテレーターは未定義の動作になります。 –

0

私が理解していないので、コードを無視して、char **に単語のリストが含まれていれば(その理由は分かりませんが、移動してください)、挿入するのが最も簡単です

std::deque<std::string> book; 

for (char *word = mywords[0]; word != NULL; ++word) 
    book.push_front(word); 

あなたが本当にベクトルを使用する場合は、後ろから前にそれを繰り返す、それは同様に簡単かなりです:

コンテナの先頭にそれらが代わりに std::vectorstd::dequeを使用することです
std::vector<std::string> book; 

for (char *word = mywords[0]; word != NULL; ++word) 
    book.push_back(word); 

// Copy the words in reverse to standard output: 
std::copy(book.rbegin(), book.rend(), 
    std::ostream_iterator<std::cout, "\n")); 
+0

std :: vectorを使いたいです。なぜイテレータが動作しないのですか?私は本の中の一言だけを得る。 – Marie

+0

多くのありがとう。 insert()メソッドを使用するのはなぜ難しいですか? – Marie

+0

@Marie: 'insert'は特に使いにくいわけではありません。ここではうまく適用されません。 –

関連する問題