STL vector

STL vector

vector 容器和 array 容器非常类似,都可以看做是对普通数组的“升级版”。不同之处在于,array 实现的是静态数组,而 vector 实现的是一个动态数组,即可以进行元素的插入和删除,在此过程中,vector 会动态调整所占用的内存空间,整个过程无需人工干预。

初始化方法

//方法一
std::vector<double> values;
values.reserve(20);//增加容量
//reserce设置了容器的内存分配,即至少可以容纳 20 个元素。需注意,如果调用 reserve() 来增加容器容量,之前创建好的任何迭代器(例如开始迭代器和结束迭代器)都可能会失效,这是因为,为了增加容器的容量,vector<T> 容器的元素可能已经被复制或移到了新的内存地址。所以后续再使用这些迭代器时,最好重新生成一下。

//方法二
std::vector<int> primes {2, 3, 5, 7, 11, 13, 17, 19};

//方法三
std::vector<double> values(20);//指定元素个数,默认为0
std::vector<double> values2(20, 1.0);//指定默认元素为1.0
int num=20;
double value =1.0;
std::vector<double> values3(num, value);//使用变量

//方法四
std::vector<char>value1(5, 'c');
std::vector<char>value2(value1);//通过其他vector
int array[]={1,2,3};
std::vector<int>values3(array, array+2);//values 将保存{1,2}
std::vector<int>value4{1,2,3,4,5};
std::vector<int>value5(std::begin(value1),std::begin(value1)+3);//value2保存{1,2,3}

vector 容器的成员函数

函数成员函数功能
begin()返回指向容器中第一个元素的迭代器。
end()返回指向容器最后一个元素所在位置后一个位置的迭代器,通常和 begin() 结合使用。
rbegin()返回指向最后一个元素的迭代器。
rend()返回指向第一个元素所在位置前一个位置的迭代器。
cbegin()和 begin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
cend()和 end() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
crbegin()和 rbegin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
crend()和 rend() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
size()返回实际元素个数。
max_size()返回元素个数的最大值。这通常是一个很大的值,一般是 232-1,所以我们很少会用到这个函数。
resize()改变实际元素的个数。
capacity()返回当前容量。
empty()判断容器中是否有元素,若无元素,则返回 true;反之,返回 false。
reserve()增加容器的容量。
shrink _to_fit()将内存减少到等于当前元素实际所使用的大小。
operator[ ]重载了 [ ] 运算符,可以向访问数组中元素那样,通过下标即可访问甚至修改 vector 容器中的元素。
at()使用经过边界检查的索引访问元素。
front()返回第一个元素的引用。
back()返回最后一个元素的引用。
data()返回指向容器中第一个元素的指针。
assign()用新元素替换原有内容。
push_back()在序列的尾部添加一个元素。
pop_back()移出序列尾部的元素。
insert()在指定的位置插入一个或多个元素。
erase()移出一个元素或一段元素。
clear()移出所有的元素,容器大小变为 0。
swap()交换两个容器的所有元素。
emplace()在指定的位置直接生成一个元素。
emplace_back()在序列尾部生成一个元素。

代码示范:

#include <iostream>
#include <vector>
using namespace std;
int main(){
	//初始化一个空vector容器
	vector<char> v;
	//添加字符
	v.push_back('S');
	v.push_back('T');
	v.push_back('L');
	//输出元素个数
	printf("元素个数:%d\n",v.size());
	//遍历输出
	for(auto i=v.begin();i<v.end();i++){
		cout<<*i<<" ";
	} 
	cout<<endl;
	//在起始位置插入元素
	v.insert(v.begin(),'A');
	cout<<"首个元素:"<<v.at(0);
	return 0; 
}

运行结果:

在这里插入图片描述

访问vector中的单个元素

vector<int> values{1,2,3,4,5};
values[0];
values.at(0)

insert()函数使用方法

语法格式用法说明
iterator insert(pos,elem)在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。
iterator insert(pos,n,elem)在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。
iterator insert(pos,first,last)在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。
iterator insert(pos,initlist)在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。
#include <iostream> 
#include <vector> 
#include <array> 
using namespace std;
int main()
{
    std::vector<int> demo{1,2};
    //第一种格式用法
    demo.insert(demo.begin() + 1, 3);//{1,3,2}

    //第二种格式用法
    demo.insert(demo.end(), 2, 5);//{1,3,2,5,5}

    //第三种格式用法
    std::array<int,3>test{ 7,8,9 };
    demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}

    //第四种格式用法
    demo.insert(demo.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}

    for (int i = 0; i < demo.size(); i++) {
        cout << demo[i] << " ";
    }
    return 0;
}

emplace()函数使用方法

//emplace() 每次在指定位置之前只能插入一个元素
emplace (const_iterator pos, args...);
//pos 为指定插入位置的迭代器;args... 表示与新插入元素的构造函数相对应的多个参数

注:emplace()函数运行效率更高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值