C++ 当字符串为“时”&引用;或者向量没有元素,`begin()`等于`end()`?

C++ 当字符串为“时”&引用;或者向量没有元素,`begin()`等于`end()`?,c++,string,iterator,C++,String,Iterator,当std::string是”或向量没有元素时,begin()是否等于end() 如果是,那么begin()/end()的值是多少?是。任何没有元素的STL容器类型都将具有begin()==end(),因为元素的范围是半开放范围[begin(),end()) 希望这有帮助 当std::string为“”或向量没有元素时,begin()是否等于end() 是的,对于任何空的标准库容器,包括std::string和std::vector,begin()将返回与end()相同的迭代器 如果是,begin

std::string
或向量没有元素时,
begin()
是否等于
end()


如果是,那么
begin()
/
end()
的值是多少?

是。任何没有元素的STL容器类型都将具有
begin()==end()
,因为元素的范围是半开放范围[
begin()
end()

希望这有帮助

当std::string为“”或向量没有元素时,begin()是否等于end()

是的,对于任何空的标准库容器,包括
std::string
std::vector
begin()
将返回与
end()
相同的迭代器

如果是,begin()/end()的值是多少


它将是该容器特有的迭代器,但不应被取消引用。这样做会导致未定义的行为。

编译和检查它怎么样?关于第二个问题,你不在乎。为什么它未定义而不是引发异常?效率?@Elazar,因为“你为你需要的东西付费”在C++中是一个常见的现象。@ EelZar例外不是程序员错误。谢谢,克里斯@ PbBee(它是“ELAZAR”BTW)。因此,从概念上讲,它应该是一个
断言
,除非库被调整为发布模式,因此其中没有断言。我说得对吗?或者这里有其他的gotcha吗?@Elazar也从来没有
断言
。如果您在任何容器中进行迭代,则您的代码有责任检查您是否有到达了()/<代码>迭代器。C++将不检查所有迭代器的引用,以查看它们是否无效。假设您正在检查。