我使用向量(字符串)书和单词列表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 :(得分:0)
在显示的代码中,pos
,begin
和end
都是book
的所有迭代器。
dico.insert(pos, begin, end);
为了某些目的,这会尝试使用这些迭代器和一些名为dico
的神秘容器。
大多数容器的insert()
方法通常采用同一容器的迭代器。 pos
不是dico
迭代器;因此,这很可能是未定义的行为。
答案 1 :(得分:0)
暂时忽略您的代码(因为我不理解),如果您有char **
包含单词列表(不确定为什么要这样做,但让#&# 39;继续前进)在容器的开头插入它们的最简单方法是使用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"));