我可以使用迭代器进行常规计算,即仅通过添加数字来对其进行递增?
例如,如果要删除元素vec[3]
,我可以这样做吗:
std::vector<int> vec;
for(int i = 0; i < 5; ++i){
vec.push_back(i);
}
vec.erase(vec.begin() + 3); // removes vec[3] element
它对我有用(g ++),但是我不确定是否[[保证可以工作。
std::advance
可用于推进通用迭代器,但由于它不返回迭代器,因此我倾向于使用+(如果可用),因为它看起来更干净。C ++ 11注意
现在有std::advance
和std::next
,它们[导致实现定义的行为。使用operator+
或Distance
,您可以要求编译器通过警告标志std::size_t n = (1 << 64) - 2;
std::vector<double> vec(1 << 64);
std::vector<double> slice(vec.begin() + n, vec.end());
来警告您这种不当的转换,警告标志g++
不属于规范的clang
或-Wsign-conversion
。
一种解决方法是直接在指针上工作
-Wall
这不漂亮,但正确。在某些情况下,您需要手动构造迭代器,例如
-Wextra