C++STL vector介绍与使用方法

本文详细介绍了C++标准模板库中的Vector容器。Vector作为一种动态数组,不仅提供了快速的数据访问方式,还克服了传统数组在内存管理和容量上的局限。文章深入探讨了Vector的基本操作,包括构造函数、迭代器、容量管理、元素访问及数据修改等方面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vector(向量)

在前面对比分析里面提到,vector内部数据结构是动态数组,也即顺序表,因此vector拥有访问数据快的优点, 但同时也有插入、删除效率低的缺点。同时,由于是动态数组,因此不需要考虑数据大小的问题,一旦vector内存空间不足,会自动重新分配内存,然后将数据拷贝到新的内存空间。

vector也是最为常用的序列容器,完全可以替换数组来使用,这样在编程过程中也会减少很多错误,同时vector还提供了一些非常方便的函数。


头文件 #include
构造函数
std::vector<int> first;              // empty vector of ints
std::vector<int> second (4,100);     // four ints with value 100
std::vector<int> third (second.begin(),second.end());  // iterating through second
std::vector<int> fourth (third);     // a copy of third

STL为标注模板库,因此所有的容器均以模板的方式提供,在使用过程中,必须向容器指定容器内存储的数据类型,可以是基本数据类型如:int, float, char, 指针等,同时也可以是自定义的struct或class。

迭代器(迭代器主要使用在算法部分)
std::vector<int> first;
std::vector<int>::iterator iter;
std::vector<int>::reverse_iterator riter;

iter = first.begin();   //指向序列容器第一个元素
iter = first.end();     //指向序列容器最后一个元素的后一个位置,也即first.end()迭代器指向位置为结束符
riter = first.rbegin();
riter = first.rend();

for (iter = first.begin(); iter != first.end(); iter++)
{
    cout << *iter << endl;
}

for (riter = first.rbegin(); riter != first.rend(); riter++)
{
    cout << *iter << endl;
}

vector容量
vector<int> first = {1, 2, 3, 4};

first.size();   //返回vector长度大小,有多少个元素
first.max_size();   //返回最大长度,vector是动态数组,一般不用考虑这个
first.resize();     //改变vector大小,同上,一般不需要考虑
first.empty();     //判断vector是否为空,没有元素返回true

在判断vector是否为空,尽量用empty函数,如果用size()是否为0来判断,则每次调用需要遍历一遍元素,效率较低。

元素访问
std::vector<int> firs(4, 100);

cout << first[0] << endl;     //直接利用下标访问元素
cout << first.at(0) << endl;  //与直接利用下标访问元素相同,但会检查参数是否越界,也即大于或等vector的大小
cout << first.front() << endl;   //返回第一个元素(first[0])
cout << first.back() << endl;    //返回最后一个元素
修改数据成员
std::vector<int> first;
std::vector<int> second;
std::vector<int> third;

second.assign(7, 100);    //second里面指定7个元素,每个元素初始值为100
third.assign(second.begin()+1, second.end()-1); //将second除去首位的元素指派给third
for (int i = 0; i < 4; i++)
{
    first.push_back(i);    //向vector添加元素(添加在尾部)
}
int tmp = 0;
tmp = first.pop_back();   //删除最后一个元素
std::vector<int>::iterator it;
it = first.insert(first.begin(), second.begin(), second.end());   //插入元素
it = first.insert(first.begin(), 2, 100);  //插入两个100

it = first.erase(first.begin());  //删除元素
it = first.erase(first.begin(), first.begin()+3);  //删除头三个元素

first.swap(second);   //first与second互换
first.clear();      //清空vector
it = first.emplace(first.begin, 100);   //(C++11)将100插入到vector的开始位置,类似于insert函数,但是insert
it = first.emplace();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值