vector相量容器
vector(向量):是一种顺序容器,事实上和数组差不多,但它比数组更优越。一般来说数组不能动态拓展,因此在程序运行的时候不是浪费内存,就是造成越界。而vector正好弥补了这个缺陷,它的特征是相当于可分配拓展的数组,它的随机访问快,在中间插入和删除慢,但在末端插入和删除快。
#include<vector>
using namespace std;
vector和built-in数组类似,它拥有一段连续的内存空间,并且起始地址不变,因此它能非常好的支持随即存取,即[ ]操作符,但由于它的内存空间是连续的,所以在中间进行插入和删除会造成内存块的拷贝,另外,当该数组后的内存空间不够时,需要重新申请一块足够大的内存并进行内存的拷贝。这些都大大影响了vector的效率。
常用类函数成员:
clear() //移除容器中所有数据。
erase(beg,end) //删除[beg,end)区间的数据,返回值为删除区域后的第一个元素地址;
erase(pos) // 删除该实参指针所对应的元素,返回值为删除区域后的第一个元素地址;
front() //传回第一个数据。
insert(pos,elem) //在pos位置插入一个elem拷贝
pop_back() //删除最后一个数据。
push_back(elem) //在尾部加入一个数据。
resize(num) //重新设置该容器的大小
size() //回容器中实际数据的个数。
begin() //返回指向容器第一个元素的迭代器
end() //返回指向容器最后一个元素的迭代器
at(pos) //返回容器中第 pos 个元素的值
一维vector
- 初始化问题
vector<int> numbers;//定义一个一维序列
//默认初始化,vector为空,size为0,未开辟空间,可通过push_back()添加元素
vector<int> numbers(5);
//默认初始化,指定vector(初始)大小为5个int空间,元素初始值默认为0
vector<int> numbers(5,2);
//初始化numbers的长度为5,所有元素的值为2;
vector<int> numbers={1,2,3,4,5};
//初始化时直接指定具体元素
- 以拷贝的形式初始化
vector<int> numbers1={1,2,3,4,5};
vector<int> numbers2=numbers1;
//以拷贝的形式初始化,初始化后numbers2将于numbers1完全一样
vector<int> numbers2(numbers1);
//这两种初始化方式是完全等价的,都是拷贝形式的初始化
vector<int> numbers2(numbers1.begin(),numbers1.end());
//拷贝两个迭代器范围内的元素来进行初始化(并不要求迭代器一定是vector的,其他容器的也可以);
- 数据类型不匹配问题:在初始化过程中如果出现数据类型不匹配的问题,如果“类型相容”(满足类型转换条件),就进行数据类型转换,否则......;
vector<int> numbers={1,2.0,3.0,4,5};
//在初始化过程中,2.0和3.0会被强制转化为整数;
二维vector
vector<vector<int>> numbers(10);//定义一个二维序列
事实上这个这个二维序列容器的意思是:定义了一个vector序列,而这个序列中的每一个元素都是“vector<int>”数据类型,而后面括号里的10的含义是先来10个这样的元素;
这样如果想在增加一行的话,可以:
vector<int> news;
numbers.push_back(news);