STL之vector常用方法 二维vector 取vector数组指针

本文详细介绍C++标准库中的vector容器的使用方法,包括初始化、增删改查等基本操作及迭代器的应用。

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

一.使用包含

#include <vector> 
using namespace std;

二.声明

1、一维数组:

vector<int> a;
vector<int> a(100, 0); //声明长度为100值为0的vector 
vector<int> a(b.begin()+1, b.end()-2);

2、动态创建m*n的二维vector:

方法一:

vector<vector<int> > arr;  (注意<int>后有空格或者使用typedef定义)
arr.resize(m);
for(int i=0;i<m;i++)  arr[i].resize(n);

方法二:

vector<vector <int> > arr(m,vector<int>(n,0)); //初始化为0,m*n大小

C++版:

int **p=new int*[m];
for(int i=0; i<m; i++) 
   p[i]=new int[n]; 

3、初始化:

int  v1[10] = {0,0,0,0,0,0};
vector<int> v(&v1[0],&v1[6]);
copy(v.begin(), &v1[0], &v1[6]);

三.增

push_back() 在数组的最后添加一个数据,可以使单个数据或者数组。如果在声明时没有定义长度,则直接用下表赋值会出错需用push_back。

b.push_back(10);

insert(pos,elem) 在pos位置插入一个elem拷贝

b.insert(a.begin(),10); //在开头位置插入,stl插入机制一般是在当前位置的前面插入
b.insert(a.end(),10);  //在结尾位置插入

assign(),对vector进行批量赋值

v1 = 10 20 30 40 50
v2 = 1 2
v2 = v1 // v2 = 10 20 30 40 50
v2.assign(v1.begin(), v1.end());  // v2 = 10 20 30 40 50
v3.assign(3, 3) ;  // v3 = 3 3 3

emplace 插入值,类似于insert

  std::vector<int> myvector = {10,20,30};
  auto it = myvector.emplace ( myvector.begin()+1, 100 ); // 在1位置插入100
  myvector.emplace ( it, 200 );  //在100位置插入200
  myvector.emplace ( myvector.end(), 300 );  // 在结尾插入300
  结果 :myvector contains: 10 200 100 20 30 300

emplace_back (100) 类似于push_back()

四.删

pop_back() 去掉数组的最后一个数据

myvector.push_back (100);
myvector.push_back (200);
while (!myvector.empty())
{
    sum+=myvector.back();
    myvector.pop_back();
}

erase() 删除指针指向的数据项,iterator
clear() 清空当前的vector

五.改

insert(pos,elem) 在pos位置插入一个elem拷贝

b.insert(a.begin(),10); //在开头位置插入,stl插入机制一般是在当前位置的前面插入
b.insert(b.end(),b.begin(),b.end());  //在结尾位置插入vector b

六.查

a[5]
at() 得到index位置的数据
begin() 得到数组头的指针
end() 得到数组的最后一个单元+1的指针
rbegin() 将vector反转后的开始指针返回
rend() 将vector反转后的结束指针返回

front() 得到数组头的引用
back() 得到数组的最后一个单元的引用

myvector.push_back(78);
myvector.push_back(16);

// now front equals 78, and back 16
myvector.front() -= myvector.back();

max_size() 得到vector最大可以是多大
capacity() 当前vector分配的大小
size() 当前使用数据的大小
empty() 判断vector是否为空

vector<int>::iterator it = find( li.begin( ), li.end( ), c ); //遍历查找c
if(iter != vec.end()){}
else{} 
如果vector中保存自定义类型structclass,需要自定义查找函数:
class DemoStruct
{
  string gpcode;
  bool operator == (const DemoStruct & obj) const //重载 “==” 操作符,函数最后的 const 别忘了,否则会报错。
  {
    return gpcode == obj.gpcode;
  }
};
vector<DemoStruct>::iterator iter;
iter = find(vec_struct.begin(), vec_struct.end(), tmpdemo);

七.遍历

 for(vector<datatype>::iterator it=a.begin();   it!=a.end();  it++)
    cout<<*it;
 for(int i=0; i<a.size; i++)
    cout<<a[i];

八、其他

取vector的数组类型指针:

//vector第一个元素的地址,注意如果vector长度为0,那么不会得到,需要判断非空
 if(!v.empty())   {   
  int *p = &v[0];   
}   
//利用vector的begin()迭代指针取值后再取地址
it = &*nums1.begin();
memcpy(merge,it,sizeof(int)*m);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值