像这样的代码:
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::prev
和std::next
。
关于c++ - 迭代器的减少和减少之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40384759/