vector的基本使用

vector的介绍

1.vector是表示可变大小的数组容器;
2.与数组的不同是,vector的大小是可以动态改变的,大小会被容器自动处理;3
3.vector插入新数据时需要增容,vector会分配一个新的数组,然后将数据全部拷过来;

vector的使用

vector //无参构造
vector(size_type n,const value_type& val = value type()) //构造并初始化n个val;
vector (const vector & x); //拷贝构造
vector(Inputlterator first,inputlterator last) //使用迭代器进行初始化构造

手撕代码

    using namespace std;
    vector<int> v1(1); 
	vector<int> v2(1, 2);
	vector<int> v3(v2.begin(), v2.end());
	vector<int> v4(v3);

vector iterator的使用

begin+end //分别获取第一个数据的位置和最后一个位置的下一个位置
rbegin+rend //分别获取最后一个数据位置和第一个数据前一个位置
在这里插入图片描述

#include<iostream>
#include<vector>
using namespace std;
void print_vector(const vector<int>& v)
{
	vector<int>::const_iterator it = v.begin();
	while (it != v.end())
	{
		cout << *it << " ";
		++it;
	}
	cout << endl;
}
int main()
{
	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	print_vector(v);
	return 0;
}

在这里插入图片描述
注意事项
1.使用迭代器时需展开vector::const_iterator定义变量进行赋值,迭代器不仅仅可以遍历,还可以用于修改对象的值。

vector空间管理

size //获取数据的个数;
capacity //获取数据的容量;
empty //判空
resize //改变vector的size;
reserve //改变vector放入的capacity;

cout << v.size() << endl;
	cout << v.capacity() << endl;
	v.resize(3);
	v.reserve(10);
	print_vector(v);
	cout << v.capacity() << endl;

在这里插入图片描述
注意事项
.1.vector的capacity是根据编译器决定的,增容的方式并不确定,不同编译器下的情况不同。
2.resize在开空间的同时还会初始化,影响size。

vector的增删查改

push_back //尾插
pop_back // 尾删
find //查找
insert //在position位置之前插入数据
erase //删除position位置的数据
swap //交换俩个vector的数据空间
operator[] //[]在vector的重载,利用下标访问数据

    vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	v.pop_back();
	vector<int>::iterator pos = find(v.begin(), v.end(), 1);
	v.erase(pos);
	v.insert(pos, 10);

在这里插入图片描述
注意事项:find如果找到该元素,会返回该元素所在位置,如果不在,则返回end()位置

遍历方式

1.operator[]
2.迭代器
3.范围for

vector<int>::const_iterator it = v.begin();
	while (it != v.end())
	{
		cout << *it << " ";
	}
	cout << endl;
	for (size_t i = 0; i < v.size(); i++)
	{
		cout << v[i] << " ";
	}
	cout << endl;
	for (auto e : v)
	{
		cout << e << " ";
	}
	cout << endl;
}

在这里插入图片描述
注意:1.迭代器可能会失效,如erase,insert,resize,reserve,assgin,push_back等pos会被移位或删除,造成野指针问题,系统会崩溃。
2.范围for底层是迭代器实现。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值