vector越界访问会怎么样_vector下标访问

vector越界访问会怎么样_vector下标访问int main vector ivec 10 coutcoutvect 中包含三个迭代器 first 迭代器指向第一个素 finish 迭代器指向最后一个有效素的下一个位置 end of storage 迭代器指向整个 vector 空间末尾的下一个位置 访问 vector 中的成员都是通过这三个迭代器实现的 通过下标访问 vector 中的素时不会做边界检查 即便下标越界 也就是说

int main(){

vector ivec(10);

cout<

cout<

vector中包含三个迭代器:first迭代器指向第一个元素;finish迭代器指向最后一个有效元素的下一个位置;end_of_storage迭代器指向整个vector空间末尾的下一个位置。访问vector中的成员都是通过这三个迭代器实现的。

通过下标访问vector中的元素时不会做边界检查,即便下标越界。也就是说,下标与first迭代器相加的结果超过了finish迭代器的位置,程序也不会报错,而是返回这个地址中存储的值。

第一行代码没有任何问题,输出首元素的值。虽然第二行代码逻辑上有问题,属于典型的越界访问,但是程序仍然会编译通过并输出对应地址的值。

如果想在访问vector中的元素时首先进行边界检查,可以使用vector中的at函数。通过使用at函数不但可以通过下标访问vector中的元素,而且在at函数内部会对下标进行边界检查。

综上所述,程序编译通过并正常运行,首选输出first迭代器对应地址中的值,然后再输出first+100对应地址的值。

编程小号
上一篇 2025-08-11 09:27
下一篇 2025-04-08 15:57

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/hz/129289.html