C++ STL序列式容器(二) vector

本文详细介绍了C++标准库中vector的使用,包括初始化、赋值、插入、删除、查找等操作,并提供了二维数组的动态创建方法。重点讲解了不同初始化方式的区别,如通过push_back、resize等函数,以及iterator的正确使用。同时,还讨论了如何在vector中查找特定值,并展示了如何处理vector的容量和大小。
摘要由CSDN通过智能技术生成

@Crystal

vector初始化

vector <int> v //没有开辟空间 size为0
这种方式下赋初值应用push_back, 不能直接v[ i ]=val
如 v.push_back(vector <int>(5,1) //初始化为5个1

vector <int> v(v1) 等价于 vector v=v1 //v1的拷贝
vector <int> v(n) //初始为n 个缺省val值0(已开辟空间)
vector <int> v(n,val) //初始化为n个相同val值(已开辟空间)
vector <int> v(v1.beg , v1.end) //获取一段序列闭区间 [ beg,end]

vector 下标问题

(1)下标声明不能直接
int l=nums.begin() ,r=nums.end();应该是vector::iterator l=nums.begin(),
r =nums.end();
(2)下标可做比较运算< ,<= ,> ,>=,!=但是不能做四则运算 mid=(l+r)/2

resize reverse

reserve()只修改capacity大小,不修改size大小,
resize()既修改capacity大小,也修改size大小。
resize既分配了空间,也创建了对象。

reverse(beg,end)

指定区间 [ beg,end ] 逆序**(闭区间)**

push_back(val)

追加

查找vector里面是否有特定的某个值val

find(first,end,val)
first,end是迭代器类型
注意是单独调用ifind函数,不是v.find()

 查找是否有5这个元素
	vector<int>::iterator it;
	it = find(v.begin(), v.end(), 5);
	if (it == v.end())
		cout << "没有找到指定元素" << endl;
	else
		cout << "找到指定元素" << endl;

insert(v.begin(),val)

头插
指定位置pos插入 第一个参数必须是v.begin()+pos 不能直接是pos(pos为int型)

insert(pos,beg,end)

指定位置pos插入区间[ beg,end )内的元素 (半开半闭) pos beg end 都是vector::iterator类型 如
insert(v1.begin(),v2.begin(),v2.end())

erase(v.begin()+pos)

指定位置pos删除
参数必须是v.begin()+pos 不能直接是pos(pos为int型)

二维数组的创建vector / C / C++的区别

vector<vector <int> > ivec(m ,vector<int>(n));    m*n的二维vector

动态创建m*n的二维vector
方法一:
vector<vector <int> > ivec;
ivec.resize(m);
for(int i=0;i<m;i++) ivec[i].resize(n);

方法二:
vector<vector <int> > ivec;
ivec.resize(m,vector<int>(n));

动态创建二维数组a[m][n]
C语言版:
#include<malloc.h>
int **a=(int **)malloc(m*sizeof(int *));
for(int i=0;i<m;i++)
a[i]=(int *)malloc(n*sizeof(int));

C++版:
int **a=new int*[m];
for(int i=0;i<m;i++) a[i]=new int[n]; 

初始化二维数组
vector<vector <int> > ivec(m ,vector<int>(n,0));    //m*n的二维vector,所有元素为0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值