文章目录
数组和链表
C++的数组和链表分别是什么?分别有什么种类?它们都有什么特性?针对这些特征,使用情形是什么?数组
什么是数组?
一个数组就像是一个变量,它可以存储一组值,但是所有值都是相同的数据类型。
一个int数组定义:int hours [6]
该数组类型为int型,即存储元素是整数。
该数组的名称是hours,方括号内为数组的大小,它表示数组可以容纳的元素或值的数量,必须是一个常量整数,其值大于0.(也可以是命名常数)
初始化数组:int hours[6] = { 1, 2, 3, 4, 5, 6}
.
访问数组元素
数组的元素可以根据下标作为单独的变量进行访问和使用,C++中的下标编号从0开始,数组中最后一个元素的下标比数组中元素的总数少1.
如果采用全局定义的方式定义一个包含数值的数组,则默认情况下,所有元素初始化为0.但是,如果定义的是局部变量,则没有默认的初始值。
上面hours数组的每个元素在被下标访问时都可以用做int变量赋值:hours[0] = 20
可变长的动态数组:vector
vector是顺序容器的一种,是可变长的动态数组。所以vector具备数组的性质:在vector容器中,根据下标随机访问某个元素的时间是常数,在尾部添加一个元素的时间大多数情况也是常数。
但是,在中间插入或删除元素,需要移动多个元素,速度较慢,平均花费时间和容器中的元素个数成正比。
Vector基本用法
成员函数 | 作用 |
---|---|
vector() | 无参构造函数,将容器初始化为空 |
vector(int n) | 将容器初始化为有n个元素 |
vector(int n, const T &val) | 假定元素类型为T,将容器初始化为有n个元素,每个元素的值都是val |
vector(iterator first, iterator last) | first,last可以是其他容器的迭代器。一般来说,本构造函数的初始化结果就是将vector容器的内容变成与其他容器上的区间[first,last)一致 |
void clear() | 删除所有元素 |
bool empty() | 判断容器是否为空 |
void pop_back() | 删除容器末尾的元素 |
void push_back(const T &val) | 将val添加到容器末尾 |
int size() | 返回容器中元素的个数 |
T & front() | 返回容器中第一个元素的引用 |
T & back() | 返回容器中最后一个元素的引用 |
iterator insert(iterator i, const T &val) | 将val插入迭代器i指向的位置,返回i |
iterator insert(iterator i, iterator first, iterator last) | 将其他容器上的区间[first,last)中的元素插入迭代器i指向的位置 |
iterator erase(iterator i) | 删除迭代器i指向的元素,返回值是被删元素后面的元素的迭代器 |
iterator erase(iterator first, iterator last) | 删除容器中的区间[first, last) |
void swap(vector < T > &v) | 将容器自身的内容和另一个同类型的容器v互换 |
#include <vector>
using namespace std;
int main(){
int a[5] = {
1, 2, 3, 4, 5}
vector <int> v(a, a+5); //将数组a的内容放入v
cout << v.end() - v.begin() << endl; //两个迭代器相减,输出:5
v.insert(v.begin()+2, 13); // 在begin()+2 位置插入13, v变为:1,2,13,3,4,5
v.eraser(v.begin()+2); // 删除位于begin()+2 位置上的元素,v变为:1,2,3,4,5
vector <int> v2(4, 100); // v2有4个元素,都是100
v2.insert(v2.begin(), v.begin() + 1,</