C ++ вставить слово в начале строкового вектора, используя метод метода insert () vector & lt; & gt;

Я использую векторную (строковую) книгу и список слов 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++;
}

0

Решение

В показанном коде pos, begin, а также endВсе итераторы book,

dico.insert(pos, begin, end);

Это пытается использовать эти итераторы для некоторых целей с каким-то таинственным контейнером dico,

insert() Метод большинства контейнеров обычно принимает итератор для того же контейнера. pos это не dico итератор; как таковое это, скорее всего, неопределенное поведение.

0

Другие решения

Игнорирование вашего кода на данный момент (так как я не понимаю его), если у вас есть 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"));
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector