vector,迭代器,数组

vector

#include

using std::vector;


初始化;

常用的操作:

v.empty();

v.size();  返回的也是配套的size_type类型。

v.push_back(t);在尾端添加一个值为t的元素。注意的是,不能用下标运算添加元素。如果在循环体里有添加vector元素的语句,则不能使用范围for语句。

v[ n];下标运算符。

v1=v2;赋值操作,数组却不能赋值给另外一个数组。

一系列比较运算,注意的是,只用当元素的值可以比较时,vector对象才能被比较。



迭代器

迭代器其实用来代替指针对容器的数据进行操作的一种产物,它避免了对指针的误用带来的错误。它定义在各种容器类里。

比如说

vector  vec;

auto it =vec.begin();迭代器,指向vector的第一个元素;

迭代器的类型:

iterator和const_iterator。一个能读写指向的内容,一个只能读。


获取迭代器的方法

auto a=vec.begin(); 获取一个指向容器首的一个迭代器

auto b=vec.end();获取一个指向容器尾的下一个位置的迭代器。


迭代器的运算符

*it

it->mem;

++it;

--it;

==

!=


和指针一样,迭代器可以进行一系列的算数运算;迭代器相减的距离的类型为 difference_type,是带符号类型;

注意的一点:改变vector对象容量的操作,都会使该vector对象的迭代器失效。



数组

基本都是之前学的知识;

要注意的是理解复杂数组的声明

int(*p) [10 ]= &a;//p  是一个指向一个int[10]的指针

int (&p)  [10]= b;// p 引用一个int [10];


数组的长度类型为size_t,定义在cstddef头文件中,是个无符号类型。


数组名在很多地方,在编译器看来是一个指针。这里要注意auto和decltype的区别。数组名在auto看来是个指针,但decltype看来却不是。

为了方便的使用数组,c++11定义了标准库函书begin和end;和容器中的两个同名函数功能类似。

#include

int  a[ ]={1,2,3};

auto b=std::begin(a);b是指向a[0] 的指针

auto c=std::end(a);c是指向数组尾的下一个位置的指针


使用数组初始化vector对象。但尽量避免使用数组和指针。


使用范围for语句处理多维数组。

for(const auto &row : ia)

for(auto col ; row)

cout<

 这里要注意的是auto。因为用了auto,所以最外层要把row申明为引用。不然row在auto看来就是指针,就出错了。










你可能感兴趣的:(主线之外(缺啥补啥))