Я использую векторную (строковую) книгу и список слов const char ** liste mywords. Я знаю метод push_back (), чтобы заполнить книгу. Но я хотел бы вставить каждое слово в начале книги. Я пытаюсь это сделать, но я не понимаю, почему книга все еще пуста.
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++;
}
В показанном коде pos
, begin
, а также end
Все итераторы book
,
dico.insert(pos, begin, end);
Это пытается использовать эти итераторы для некоторых целей с каким-то таинственным контейнером dico
,
insert()
Метод большинства контейнеров обычно принимает итератор для того же контейнера. pos
это не dico
итератор; как таковое это, скорее всего, неопределенное поведение.
Игнорирование вашего кода на данный момент (так как я не понимаю его), если у вас есть char **
содержащий список слов (не знаю, зачем вы это делаете, но давайте двигаться дальше), самый простой способ вставить их в начало контейнера — использовать std::deque
вместо std::vector
:
std::deque<std::string> book;
for (char *word = mywords[0]; word != NULL; ++word)
book.push_front(word);
Если вы действительно хотите использовать вектор, итерируйте его обратно, это довольно так же просто:
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"));