标准C++中的vector用法

STL是C++标准的组成部分,它提供了一组表示容器、迭代器、函数对象和算法的模板。

容器:是一个与数组类似的单元,可以存若干个值。STL容器是同质的,即存储相同类型的值;

算法:是完成特定任务的方法;

迭代器:是能够用来遍历容器的对象,与能够遍历数组的指针类似,是广义指针;

函数对象:是类似于函数的对象,可以是类对象或函数指针(包括函数名,因为函数名被用作指针)。


vector是C++标准模板库中的部分内容,它能够像容器一样存放各种类型的对象,类似一个能够存放任意类型对象(但不可以存放引用)的动态数组。

包含的头文件:

#include <vector>

声明命名空间:

using namespace std;

using std::vector;

vector<int> vint;

或使用全名

std::vector<int> vint; 

一、定义和初始化vector对象

vector是一种类模板,所以vector对象的定义和初始化为:

vector<T> v1;      //v1是一个空vector,它潜在的元素是T类型的,执行默认初始化
vector<T> v2(v1);  //用v1初始化v2。  注意:v1与v2的类型T必须一样
vector<T> v2 = v1; //等价于v2(v1)
vector<T> v3(n, val);  //v3包含了n个元素,每个元素值都是val
vector<T> v4(n);       //v4包含了n个执行默认初始化的对象
vector<T> v5{a, b, c...};    //用a,b,c初始化v5
vector<T> v5 = {a, b, c...}; //等价于v5{a, b, c...}
对于默认初始化:如果元素类型是内置类型,比如int,则元素初始值自动设置为0。如果元素是某种类类型,如string,则元素由类的默认构造函数初始化。

如果vector对象中的元素不支持默认初始化,我们就必须提供初始的元素值。对这种类型的对象来说,只提供元素的数量而不设定初始值无法完成初始化工作。

二、向vector中添加元素

1、使用push_back()将新元素添加到vector对象的末尾。

vector<int> v2;  //空vector对象
for (int i = 0; i < 100; ++i)
    v2.push_back(i); //将i放到v2的末尾

2、使用insert()将新元素插入任意位置前。

例1:

vector<int> v1(10, 0);
v1.insert(v1.begin(), 2);//在第0个元素前插入一个值为2的新元素
例2:

vector<int> v1(10, 3);//10个元素,值都是3
vector<int> v2(5); //5个元素,值默认为0
//将v1的前3个元素插入到v2的第0个元素前,v2就有8个元素
v2.insert(v2.begin(), v1.begin(), v1.begin() + 4);

注:不能在范围for循环中向vector对象添加元素(范围for语句体内不应该改变其所遍历序列的大小)。

例3:

vector<float> v1;
int a[3] = {3, 4, 5};
v1.insert(v1.end(), a, a + 3); //将数组a的所有元素添加到v1向量后面


三、删除vector中的元素

1、使用pop_back()将vector对象的最后一个元素删除。

2、使用erase()删除给定区间的元素。

例1:

v1.erase(v1.begin(), v1.begin() + 2); //删除v1的第0个和第1个元素

例2:

v1.erase(v1.begin()+1); //删除v1的第1个元素
3、使用clear()将vector对象的所有元素删除。

四、访问vector中的元素

1、可以使用下标运算符来访问(或修改)vector的元素(像访问数组元素一样),vector对象的下标也是从0开始

vector<int> v1(10, 0);
for (int i = 0; i < 10; ++i)
    v1[i] = 5; //将v1的0到9元素赋值为5

注:vector对象的下标运算符可用于访问(或修改)已存在的元素,而不能用于添加元素

2、使用at()方法

vector<int> v1(10);
for (int i = 0; i < v1.size(); ++i)
{
    cout << v1.at(i) << endl; //输出第i个元素
}
3、使用front()获取第一个元素

4、使用back()获取最后一个元素

5、使用指针访问任意元素

vector<int> v1(10, 0);
int * ptr = &v1[0];//ptr指向v1的第0个元素
for (int i = 0; i < v1.size(); ++i)
{
    *ptr++ = 10; //将v1的每个元素都赋值为10
}

五、其他vector操作

v1.empty();     // 判断容器v1是否为空。
v1.size();      // 返回容器v1中实际数据的个数。
v1.begin();     // 传回迭代器中的第一个数据地址。
v1.end();       // 指向迭代器中末端元素的下一个,指向一个不存在元素。
v1.max_size();  // 返回容器中最大数据的数量。
v1.rbegin();    // 传回一个逆向队列的第一个数据。
v1.rend();      // 传回一个逆向队列的最后一个数据的下一个位置。

//如果n小于v1元素个数,则v1删除超出n的元素。如果n大于v1元素个数,
//则在v1的末尾扩展需要的元素数目,如果第二个参数val指定了,扩展的
//新元素初始化为val,否则按类型默认初始化。
v1.resize(n, val); 
v1.resize(n);

v1.reserve();   // 保留适当的容量。不太清楚具体用法
v1.swap(v2);
swap(v1,v2);    // 将v1和v2元素互换。同上操作。

v1 = v2 //将v2赋值给v1,v1的元素数目和大小都将与v2一样
v1 = {a, b, c} //用列表的元素替换v1中的元素
v1 == v2 //当且仅当v1和v2的元素数量相同且对应位置的元素值相同时,v1等于v2。
v1 != v2
<, <=, >, >= //同==一样的比较方式


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值