【发布时间】:2015-09-30 02:48:30
【问题描述】:
我对这段代码的结果感到非常困惑:
std::vector<int> v;
std::cout << (v.end() - v.begin()) << std::endl;
v.reserve(1);
std::cout << (v.end() - v.begin()) << std::endl;
v[9] = 0;
std::cout << (v.end() - v.begin()) << std::endl;
输出:
0
0
0
所以...首先...end() 不是指向内部数组的末尾而是最后一个被占用的单元格...好的,这就是为什么迭代器减法的结果仍然是0在reserve(1) 之后。但是,为什么填充了一个单元格后仍然是0。我期望1 作为结果,因为end() 现在应该将迭代器返回到第二个内部数组单元格。
此外,为什么我在使用v[9] = 0 访问第十个单元格时没有遇到段错误,而向量只有 1 个单元格长?
【问题讨论】:
标签: c++ vector segmentation-fault