vector<int> v; //创建一个向量vs vector<int>::iterator it; //C98标准 for(it=v.begin();it!=v.end();it++){ cout<<*it<<' '; } 当然,遍历也可以直接使用下标访问: 1 2 3 for(int i=0;i<v.size();i++){ cout<<v[i]<<' '; } 请根据自己的使用习惯进行合理的安排,对于新手而言...
stl vector是一个动态数组,其内部实现采用连续的内存空间存储元素。vector中的每个元素都可以通过下标进行访问,且vector支持快速的随机访问。vector还支持在尾部添加/删除元素,并可以动态扩展/缩小内部空间以适应元素数量的变化。2. stl vector初始化 在使用stl vector之前,需要先进行初始化。vector提供了多种初始化...
数组下标通常定义为size_t类型,机器相关无符号类型,cstddef头文件中。 指针相减类型ptrdiff_t,带符号类型,也定义在cstddef头文件中。 内置的下标运算符所用的索引值不是无符号类型,这一点和vector string不同。 6 C风格字符串 使用标准库string比使用C风格字符串更加安全和高效。 出现字符串字面值的地方都可以用 ...
下标操作仅能对确知已存的元素进行赋值和读取操作 vector<int> ivec(10,1); for(vector<int>::size_type ix=0; ix!=ivec.size(); ++ix) ivec[ix] = 0; for(vector<int>::size_type ix=0; ix!=ivec.size(); ++ix) cout << ivec[ix] << " "; ...
2.你并没有什么代码把奇数剔除了,所以数组的长度仍然可能是奇数,这样你的ix=ix+2操作就有可能丢失最后一个元素,同时这种情况下ivec[ix+2]这个也会越界。3.用stl工作时,应该尽量避免用for和while循环,而应该改用for_each等标准算法。即使用自己的循环,也应该优先用iterator,而不是下标方式。
1、vector的动态增长 当添加元素时,如果vector空间大小不足,则会以原大小的两倍另外配置一块较大的新空间,然后将原空间内容拷贝过来,在新空间的内容末尾添加元素,并释放原空间。vector的空间动态增加大小,并不是在原空间之后的相邻地址增加新空间,因为vector的空间是线性连续分配的,不能保证原空间之后有可供配置的空...
2)使用实例如下(区分C程序员和嵌入式系统程序员的最基本的问题。): 并行设备的硬件寄存器(如:状态寄存器)一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)多线程应用中被几个任务共享的变量3)一个参数既可以是const还可以是volatile吗?解释为什么。 可以。一个例子是只读的状态寄存器。它是volatil...
可以用于实现移动语义,避免深拷贝提升性能。move的意义就在于直接把被拷贝者的数据移动过来,然后被拷贝者不再被使用。 在大部分STL容器中都实现了以右值引用为参数的移动构造函数和移动赋值重载函数。最常见的如std::vector的push_back和emplace_back。 std::forward 完美转发 虽然名字含义是转发,但他并不会做转发,...
只不过这样的书写方式,是按照顺序给数组元素赋值的。 在初始化多维数组的时候,我们应该采用第一种方式,这种方式使得这个初始化的整个列表更容易阅读。其次,如果是不完整初始化,那么使用第一种方式就非常有用,如下所示。 代码语言:javascript 复制 int num[3][3]={{1,2,3},{},{7,8,9}}; ...