我想知道,如果它是"安全的"设置string等于无论是通过取消引用现成的,最终返回iterator的vector的string秒.当我运行程序时
#include <vector>
#include <string>
int main()
{
std::vector<std::string> myVec;
std::cout << *myVec.end();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误.
/usr/local/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../../include/c++/4.1.2/debug/safe_iterator.h:181:
error: attempt to dereference a past-the-end iterator.
Objects involved in the operation:
iterator "this" @ 0x0xffdb6088 {
type = N11__gnu_debug14_Safe_iteratorIN9__gnu_cxx17__normal_iteratorIPSsN10__gnu_norm6vectorISsSaISsEEEEEN15__gnu_debug_def6vectorISsS6_EEEE (mutable iterator);
state = past-the-end;
references sequence with type `N15__gnu_debug_def6vectorISsSaISsEEE' @ 0x0xffdb6088
}
Disallowed system call: SYS_kill
Run Code Online (Sandbox Code Playgroud)
您可以在http://codepad.org/fJA2yM30上查看
我想知道这一切的原因是因为我的代码中有一个片段就像是
std::vector<const std::string>::iterator iter(substrings.begin()), offend(substrings.end());
while (true)
{
this_string = *iter;
if (_programParams.count(this_string) > 0)
{
this_string = *++iter;
Run Code Online (Sandbox Code Playgroud)
而且我想确保一些奇怪的东西如果++iter等于就不会发生offend.
R S*_*ahu 11
你说:
我想知道将字符串设置为等于通过解引用字符串向量的off-the-end迭代器返回的字符串是否"安全"
不,这不安全.来自http://en.cppreference.com/w/cpp/container/vector/end
返回容器的最后一个元素后面的元素的迭代器.
该元素充当占位符; 尝试访问它会导致未定义的行为.
| 归档时间: |
|
| 查看次数: |
6141 次 |
| 最近记录: |