像这样的代码:

list<const char *> lst_city = {"NewYork", "Tokoyo", "ShenZhen"};
vector<string> vs_city;
vs_city.assign(lst_city.cbegin(), --lst_city.cend());


是的。但是,如果我这样做,将是错误的:

vs_city.assign(lst_city.cbegin(), lst_city.cend() - 1);


有什么区别-和-1,我不太清楚。
如果它是一个向量,那也将是一件好事,那仅仅是因为列表的双边关系吗?

最佳答案

std::vector的迭代器为Random Access Iterators-可以使用+-将它们偏移任意偏移量,而1只是特定偏移量。

std::list的迭代器无法做到:它们只是Bidirectional Iterators,一次只能递增(++)和递减(--)一个元素。

您可以根据迭代器的功能,使用这两种方法之一,使用std::advance编写移位任意迭代器的代码。

在您的情况下,即非常常见的单个元素移位,可以使用std::prevstd::next

关于c++ - 迭代器的减少和减少之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40384759/

10-11 22:38
查看更多