C ++使用insert()方法向量<>在字符串向量的开头插入单词

时间:2016-10-08 18:13:59

标签: c++ vector

我使用向量(字符串)书和单词列表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++;
}

2 个答案:

答案 0 :(得分:0)

在显示的代码中,posbeginend都是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"));