C++ Vector (动态数组)

简介


  • 向量(Vector)是一个封装了动态大小数组的顺序容器。
  • 向量是一个能够存放任意类型的动态数组。

C++ 中 Vector 的使用


  • 头文件 #include <vector>
  • 需要使用 std 命名空间 using namespace std;
  • 以下使用方法以 int 数据类型为例,使用时可自定义数据类型
  • 下文中含有 c++11 标签的为 C++ 11 中的新特性
  • 注意:下文中区间为左闭右开

1. 定义(初始化)Vector

  • vector<int> v; 创建一个空vector
  • vector<int> v(5); 创建一个vector,元素个数为 5
  • vector<int> v(5,10); 创建一个元素个数为 5 且每个元素的值均为 10 的 vector
  • vector<int> v2(v1); 复制另一个 vector 使 v2 与 v1 相等
  • vector<int> v(begin,end);复制[begin,end)区间内另一个数组的元素到vector中
int a[]={2,4,6,8,10};
vector<int> v(&a[1],&a[3]);

2. 向 Vector 中增加元素

  • v.push_back(x) 向尾部增加一个元素 x
  • v.insert(pos,x) 向pos地址指向元素前增加一个元素 x
v.insert(v.begin(),666); //在首元素前插入元素 666
v.insert(v.begin()+1,666); //在第二个元素前插入元素 666
  • v.insert(pos,n,x) 向pos地址指向元素前增加 n 个相同的元素 x
v.insert(v.begin(),3,666); //在首元素前插入 3 个元素 666
  • v.insert(pos,first,last) 向pos地址指向元素前插入另一个相同类型向量[first,last)间的数据
v.insert(v.begin(),v2.begin(),v2.end()); //将v2所有元素插入v1之前
  • v.emplace(pos,x) 向pos地址指向元素前增加一个元素 x c++11
v.emplace(v.begin()+1,100);
  • v.emplace_back(x) 向尾部增加一个元素 x c++11
v.emplace_back(100);

3. 删除 Vector 中元素

  • v.pop_back() 删除向量中最后一个元素
  • v.clear() 清空向量中所有元素
  • v.erase(pos) 删除向量中迭代器指向元素
v.erase(v.begin()); //删除首元素
  • v.erase(first,last): 删除向量中[first,last)中元素
v.erase(v.begin()+1,v.end()-1); //删除第二个到倒数第二个之间的元素

4. 遍历 Vector 中元素

  • v[i] 直接访问 Vector 中元素
  • v.at(pos)返回 pos 位置元素的值 pos下标从0开始 (类似数组)
  • v.front() 返回首元素的值
  • v.back() 返回尾元素的值
  • v.begin() 返回向量头指针,指向第一个元素
  • v.end() 返回向量尾指针,指向向量最后一个元素的下一个位置
  • v.cbegin() 返回向量头指针,该指针不能修改向量中元素 c++11
  • v.cend() 返回向量尾指针,该指针不能修改向量中元素 c++11
  • v.rbegin() 反向迭代器,指向最后一个元素
  • v.rend() 反向迭代器,指向第一个元素之前的位置
  • v.rbegin() 反向迭代器,该指针不能修改向量中元素 c++11
  • v.rend() 反向迭代器,该指针不能修改向量中元素 c++11
  • v.data() 返回指向向量内部第一个元素的指针 c++11
//直接遍历元素
for(int i=0;i<v.size();i++)
{
    cout<<v[i]<<" ";
}

//使用迭代器遍历元素
for(vector<int>::iterator i=v.begin();i<v.end();i++)
{
	cout<<*i<<" ";
}

//使用迭代器const_iterator遍历元素
for(vector<int>::const_iterator i=v.cbegin();i<v.cend();i++)
{
	cout<<*i<<" ";
}

//使用反向迭代器遍历元素(倒序输出)
for(vector<int>::reverse_iterator i=v.rbegin();i<v.rend();i++)
{
	cout<<*i<<" ";
}

//使用反向迭代器const_reverse_iterator遍历元素(倒序输出)
for(vector<int>::const_reverse_iterator i=v.crbegin();i<v.crend();i++)
{
	cout<<*i<<" ";
}

//data()用法
vector<int> v(5);
int* p = v.data();
*p = 10;
p++;
*p = 20;
p[2] = 100;
for (int i=0;i<v.size();++i)
cout << ' ' << v[i];
//输出 10 20 0 100 0

5. 其他方法

  • v.empty() 判断向量是否为空,为空返回1否则返回0
  • v.size() 返回向量中元素的个数
  • v.resize(n) 将向量大小设为 n
  • v.capacity() 返回当前向量所能容纳的最大元素数量
  • v.max_size() 返回最大可允许的vector元素数量值
  • v.swap(v2) 交换两个同类型向量 v 和 v2
  • v.assign(n,x) 把向量中第 n 个元素的值设为 x
  • v.assign(first,last) 将向量中[first,last)元素设置成当前向量元素
  • v.shrink_to_fit() 降低 Vector 容量和size匹配 c++11
//将v中元素设置为v2中元素
v.assign(v2.begin(),v2.end());

总结一下常用语法

语法说明
vector<int> v;创建空vector
v.push_back(x)向尾部增加一个元素 x
v.insert(pos,x)向pos地址指向元素前增加一个元素 x
v[i]访问 i 位置元素
v.pop_back()删除向量中最后一个元素
v.clear()清空向量中所有元素
v.empty()判断向量是否为空
v.size()返回向量中元素的个数
v.begin()返回向量头指针(迭代器),指向第一个元素
v.end()返回向量尾指针(迭代器),指向最后一个元素+1位置

整理到一起方便查阅:

  • vector<int> v; 创建一个空vector
  • vector<int> v(5); 创建一个vector,元素个数为 5
  • vector<int> v(5); 创建一个元素个数为 5 且每个元素的值均为 10 的 vector
  • vector<int> v2(v1); 复制另一个 vector 使 v2 与 v1 相等
  • vector<int> v(begin,end);复制[begin,end)区间内另一个数组的元素到vector中
  • v.push_back(x) 向尾部增加一个元素 x
  • v.insert(pos,x) 向pos地址指向元素前增加一个元素 x
  • v.insert(pos,n,x) 向pos地址指向元素前增加 n 个相同的元素 x
  • v.insert(pos,first,last) 向pos地址指向元素前插入另一个相同类型向量[first,last)间的数据
  • v.emplace(pos,x) 向pos地址指向元素前增加一个元素 x c++11
  • v.emplace_back(x) 向尾部增加一个元素 x c++11
  • v.pop_back() 删除向量中最后一个元素
  • v.clear() 清空向量中所有元素
  • v.erase(pos) 删除向量中迭代器指向元素
  • v.erase(first,last): 删除向量中[first,last)中元素
  • v[i] 直接访问 Vector 中元素
  • v.at(pos)返回 pos 位置元素的值 pos下标从0开始 (类似数组)
  • v.front() 返回首元素的值
  • v.back() 返回尾元素的值
  • v.begin() 返回向量头指针,指向第一个元素
  • v.end() 返回向量尾指针,指向向量最后一个元素的下一个位置
  • v.cbegin() 返回向量头指针,该指针不能修改向量中元素 c++11
  • v.cend() 返回向量尾指针,该指针不能修改向量中元素 c++11
  • v.rbegin() 反向迭代器,指向最后一个元素
  • v.rend() 反向迭代器,指向第一个元素之前的位置
  • v.rbegin() 反向迭代器,该指针不能修改向量中元素 c++11
  • v.rend() 反向迭代器,该指针不能修改向量中元素 c++11
  • v.data() 返回指向向量内部第一个元素的指针 c++11
  • v.empty() 判断向量是否为空,为空返回1否则返回0
  • v.size() 返回向量中元素的个数
  • v.resize(n) 将向量大小设为 n
  • v.capacity() 返回当前向量所能容纳的最大元素数量
  • v.max_size() 返回最大可允许的vector元素数量值
  • v.swap(v2) 交换两个同类型向量 v 和 v2
  • v.assign(n,x) 把向量中第 n 个元素的值设为 x
  • v.assign(first,last) 将向量中[first,last)元素设置成当前向量元素
  • v.shrink_to_fit() 降低 Vector 容量和size匹配 c++11

官方英文说明

迭代器:
begin Return iterator to beginning (public member function )
end Return iterator to end (public member function )
rbegin Return reverse iterator to reverse beginning (public member function )
rend Return reverse iterator to reverse end (public member function )
cbegin Return const_iterator to beginning (public member function )c++11
cend Return const_iterator to end (public member function )c++11
crbegin Return const_reverse_iterator to reverse beginning (public member function )c++11
crend Return const_reverse_iterator to reverse end (public member function )c++11

容量:
size Return size (public member function )
max_size Return maximum size (public member function )
resize Change size (public member function )
capacity Return size of allocated storage capacity (public member function )
empty Test whether vector is empty (public member function )
reserve Request a change in capacity (public member function )
shrink_to_fit Shrink to fit (public member function )c++11

访问元素:
operator[] Access element (public member function )
at Access element (public member function )
front Access first element (public member function )
back Access last element (public member function )
data Access data (public member function )c++11

修改器:
assign Assign vector content (public member function )
push_back Add element at the end (public member function )
pop_back Delete last element (public member function )
insert Insert elements (public member function )
erase Erase elements (public member function )
swap Swap content (public member function )
clear Clear content (public member function )
emplace Construct and insert element (public member function )c++11
emplace_back Construct and insert element at the end (public member function )c++11

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值