【发布时间】:2013-05-13 23:51:06
【问题描述】:
当std::string 为"" 或向量没有元素时,begin() 是否等于end()?
如果有,begin()/end()的值是多少?
【问题讨论】:
-
编译检查一下怎么样?关于你的第二个问题,你不在乎。
当std::string 为"" 或向量没有元素时,begin() 是否等于end()?
如果有,begin()/end()的值是多少?
【问题讨论】:
当 std::string 为 "" 或向量没有元素时, begin() 是否等于 end()?
是的,对于任何空的标准库容器,包括std::string 和std::vector,begin() 将返回与end() 相同的迭代器。
如果有,begin()/end()的值是多少?
它将是该容器独有的迭代器,但不应取消引用。这样做会导致未定义的行为。
【讨论】:
assert,除了库被调整为发布模式,因此其中没有断言。我对吗?还是这里有其他问题?
asserts。如果您正在迭代任何容器,则 您的代码 有责任检查您是否已到达 end() 迭代器。 C++ 不会检查所有迭代器取消引用以查看它们是否无效。假设您正在检查。
是的。任何没有元素的 STL 容器类型都会有 begin() == end(),因为元素的范围是半开范围 [begin(), end())。
希望这会有所帮助!
【讨论】: