+1.1向量 链表 数组

向量:向量支持随机读取和更改 查找一般 末端删除快 随机删除慢,它是 “class”. 可作为顺序容器,类似数组,但大小可动态变化。与数组比较,它浪费存储空间,用起来麻烦

链表:只有头结点有名字,不支持随机读取和更改 查找慢 元素较多时删除时间大约是查找时间,适用于插入或删除频繁,存储空间需求不定的情况,存储空间不连续,动态分配内存;

数组:,数组是“变量,大小不可改变,数组无法动态定做,或者要做额外的善后工作,数组无法整体复制,向量可以,数组无法扩容。存储效果高,存取数度快;

vector(向量)是c++STL(标准模板类库)的重要一员,使用时,要包含头文件vector即可。

  • 数组无法整体复制

int a[10] = {0};
int b[10] = a; //错

vector<int> c(10);
vector<int> d = c; //正确

除此之外,向量还有好多种定义方式,还可以从数组中获得初值,例如

int a[3] = {1, 2, 3};
vector<int> va(a, a+3);

  • 数组无法动态定做,或者要做额外的善后工作

int n;
cin>>n;
int a[n]; //不正确,数组大小不确定

若采用动态定做,从而需要释放空间

int n;
cin>>n;
int* ap = new int[n];
// 一系列数据处理
delete[] ap;

如果换成向量,则一目了然

int n;
cin>>n;
vector<int> va(n);

  • 数组无法扩容

vectot<int> va;

//无法想象对应的数组操作
for (int a; cin>>a; va.push_bach(a));

向量还有好多常用的操作,这些操作是数组所不具备,但同时向量又可以像数组一样被使用,例如:

vector<int> a;
a.push_bach(5); //在a向量最后位置插入一个元素
a.pop_back(); //删除a向量的最后一个元素
a.clear(); //清空a向量中的元素
int x = a.front(); //将a向量的第一个元素赋给x
int y = a.back(); //将a向量的最后一个元素赋给y
bool b = a.empty(); //判断是否为空
a.resize(10); //将元素个数调至10个,多则删,少则补

//等等

其中a.begin(),b.end()分别表示向量a的起始元素位置和最后一个元素之外的元素位置.

输出向量中的元素可以如下:

for (int i = 0; i < a.size(); ++i)
    cout<<a[]<<" ";

还有一个比较有用的是对向量中的元素进行排序:

sort(a.begin(), a.end()); //从小到大排序

 
 
原文地址:https://www.cnblogs.com/Ph-one/p/7553209.html