bycj.net
当前位置:首页 >> C++ STL里,vECtor 为何能用下标来访问元素? >>

C++ STL里,vECtor 为何能用下标来访问元素?

重载了下标运算符的对象.举个例子#include using namespace std;template class Vec {public: T &operator [](unsigned index) { std::cout s; s[10] = 5; cout 评论0 0 0

vector是标准库定义的,size_t是在标准C库中定义的.他的返回值是unsigned int型.在32位机器中,size_t占用4字节的内存空间,与多数的int型一样(少数的占2个字节).而在64位机器中,size_t就占用8个字节的内存空间,int型与long型还是占4个字节的内存空间.所以LZ用const int来定义数组的大小是没错的,前提是要在32位机器下.反之,在64位的机器下就有问题.用size_t也就是让代码的移植性增强.个人意见,高手勿喷

vector 的下标操作和数组是一样的.另外有个 at() 函数同样返回元素引用,越界时抛异常.

像数组或者vector之类的容器,可以使用下标访问,list并没有提供下标访问比如说有一个int型数组a,它有1,3,5三个元素,这三个元素会从0开始被编号,这个编号就是下标.也就是说,1是数组a的0号下标所对应的元素,3是数组a的1号下标所对应的元素,5是数组a的2号下标所对应的元素.如果你要访问1就可以直接使用a[0],访问3直接使用a[1]以此类推,这就是下标访问.

vector越界是未定义行为,行为可能会因为编译器或机器的改变而改变,可能下一次运行就不是这个值了.在vs中,越界会跳转到此并中断程序 #if _ITERATOR_DEBUG_LEVEL == 2 if (size() <= _Pos) { // report error _DEBUG_ERROR("vector subscript out of range"); _SCL_SECURE_OUT_OF_RANGE; }

gcc 4.4是符合iso2003标准的编译器,而vc6不符合.因该以gcc下能运行为标准,而非旧版vc标准下v.erase输入参数是迭代指针,而&v[1]是一个int地址补救做法,强制转换1、v.erase( static_cast::iterator>(&v[1]) );2、v.erase( (vector::iterator)(&v[1]) );标准做法,迭代器操作3、v.erase( v.begin()+1 );ps:另外for循环中的v[0]也因该是v[i]

可以私聊我~

因为c++并没有给set这种容器重载[]操作符,所以不像vector一样可以用数组下标访问元素

此处的随机是什么意思,如果是直接访问可以用[]运算符,还有一个at()方法也是访问元素的,at比[]更安全,因为越界会出错. 如果是其中任意一个数的话,用stdlib.h中的rand函数,vector.at(rand())%3)这样就行了,但是记住开始要用srand函数初始化!

属于粗心大意的类型,给你改了#include#include#includeusing namespace std;int main(){ vector v; vector> v1; int n,m; cout > n >> m; for(int i = 0; i 评论0 0 0

相关文档
4405.net | realmemall.net | ymjm.net | ceqiong.net | xcxd.net | 网站首页 | 网站地图
All rights reserved Powered by www.bycj.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com