Is std::vector::begin() - 1 undefined?
Is std::vector::begin() - 1 undefined?
我需要以向后的顺序迭代一些元素,我使用的是:
for ( /* ... */ it = vec.end() - 1, end = vec.begin() ; it >= end ; --it ) {
// ...
我现在知道end() - 1
是为一些容器定义的,包括向量,但现在我需要知道是否也定义了开始递减。
编辑
我不知道我是否可以使用reverse_iterator,因为我需要将这些迭代器作为参数传递给std::vector::erase,从文档中看,它们是不同的类型。
是的,它是未定义的。
如果要反向迭代元素,只需使用rbegin
和rend
即可。它们是反向迭代器,专门为此目的而设计。如果需要从反向迭代器中获得标准迭代器,可以在迭代器上使用base
成员函数。
这是未定义的行为。但是为什么不使用反向迭代器rbgin()和rend()呢?
std::vector<int> vec{0,1,2,3,4}
for (auto it = vec.rbegin(); it != vec.rend(); ++it)
{
std::cout << *it << " ";
}
std::cout << std::endl;
输出
4 3 2 1 0
相关文章:
- 使用std::multimap迭代器创建std::list
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从持续时间构造std::chrono::system_clock::time_point
- std::具有相同基类的类的变体
- std::向量与传递值的动态数组
- 使用std::vector的OpenCL矩阵乘法
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- std::condition_variable::wait()如何评估给定的谓词
- 如何获取std::result_of函数的返回类型
- std::原子加载和存储都需要吗
- 将对象移动到std::shared_ptr
- 尝试用C++编码时,我收到一长串错误,例如"/tmp/ccloHU4h.o:dad.cpp:(.text+0x5c): undefined reference to `std::cout'"
- 错误"undefined reference to 'std::cout'"
- visual c++ std::tr1::hash::operator() undefined?
- Is std::vector::begin() - 1 undefined?
- 返回迭代器时"undefined reference to std::_Rb_tree_const_iterator"
- C++:使用"std"时出错"Undefined symbols for architecture x86_64"