【C++】容器:vector的接口介绍大全


vector 是 C++ 标准模板库(STL)中最常用的动态数组容器之一,提供了一组丰富的接口来方便地管理元素集合。以下是 vector 类模板的主要接口:

一、vector的接口介绍

  1. 构造函数:

    • vector():创建一个空的 vector。
    • vector(size_type count, const T& value):创建包含 count 个值为 value 的元素的 vector。
    • vector(const vector& other):复制另一个 vector。
    • vector(initializer_list<T> init):使用初始化列表创建 vector。
    • vector(iterator first, iterator last):创建一个 vector,其元素由范围 [first, last) 内的元素初始化。
  2. 赋值操作符:

    • operator=:将一个 vector 赋值给另一个 vector。
    • assign(InputIt first, InputIt last):用范围 [first, last) 内的元素替换当前 vector 的内容。
    • assign(size_type count, const T& value):用 count 个值为 value 的元素替换当前 vector 的内容。
  3. 迭代器:

    • begin():返回指向第一个元素的迭代器。
    • end():返回指向最后一个元素后面的位置的迭代器。
    • rbegin():返回指向最后一个元素的迭代器。
    • rend():返回指向第一个元素前面的位置的迭代器。
    • cbegin():返回指向第一个元素的 const 迭代器。
    • cend():返回指向最后一个元素后面的位置的 const 迭代器。
  4. 容量:

    • size():返回 vector 中的元素数量。
    • max_size():返回 vector 可以容纳的最大元素数量。
    • capacity():返回 vector 当前分配的存储容量。
    • empty():如果 vector 为空,则返回 true,否则返回 false。
    • reserve(size_type new_cap):请求 vector 容器的存储空间至少足够容纳 new_cap 个元素。
    • shrink_to_fit():将 vector 的 capacity 缩小为与其 size 相等。
  5. 访问元素:

    • operator[]:访问指定位置的元素。
    • at(size_type pos):访问指定位置的元素,并进行范围检查。
    • front():返回第一个元素的引用。
    • back():返回最后一个元素的引用。
    • data():返回指向底层数据的指针。
  6. 修改容器:

    • push_back(const T& value):将元素添加到 vector 的末尾。
    • pop_back():移除 vector 的最后一个元素。
    • emplace_back(Args&&... args):在 vector 的末尾就地构造一个元素。
    • insert(iterator pos, const T& value):在指定位置插入元素。
    • erase(iterator pos):移除指定位置的元素。
    • clear():移除所有元素。
  7. 修改操作:

    • resize(size_type count):改变 vector 的大小。
    • resize(size_type count, const T& value):改变 vector 的大小,并用 value 值初始化新的元素。
    • swap(vector& other):交换两个 vector 的内容。
  8. 搜索:

    • find(const T& value):在 vector 中查找值为 value 的第一个元素。
    • find_if(UnaryPredicate p):在 vector 中查找满足条件 p 的第一个元素。
    • count(const T& value):返回值为 value 的元素的数量。
  9. 排序:

    • sort():对 vector 中的元素进行排序。
    • reverse():颠倒 vector 中元素的顺序。

二、常用接口的使用

1. 定义vector

在C++中,vector是一个模板类,用于存储一组动态大小的元素。它位于 <vector> 头文件中,可以通过模板参数来指定存储的元素类型。

#include <vector>
using namespace std;

vector<int> v_int; // 定义一个存储整数的vector
vector<double> vdouble; // 定义一个存储双精度浮点数的vector
vector<int> v1(10); //定义了10个整型元素的vector(尖括号中为元素类型名,它可以是任何合法的数据类型),但没有给出初值,其值是不确定的。
vector<int> v2(10,0); //定义了10个整型元素的vector,且给出每个元素的初值为0
vector<int> v3(a); //用数组来创建vector,整体复制性赋值
vector<int> v4(a.begin(),a.begin+3); //定义了a值为b中第0个到第2个(共3个)元素
int a[5]={1,2,3,4,5};
vector<int> v5(a,a+7); //从数组中获得初值
vector<int> v6 = {1, 2, 3}; // 使用初始化列表创建 vector

2. vector赋值操作

#include <iostream>
#include <vector>

int main() {
    vector<int> vec1 = {1, 2, 3};
    vector<int> vec2 = {4, 5, 6};
    //operator=: 将一个 vector 赋值给另一个 vector。
    vec2 = vec1; // 将 vec1 赋值给 vec2
    vector<int> newVec;
    //assign(): 用范围 [first, last) 内的元素替换当前 vector 的内容。
    newVec.assign(vec.begin(), vec.end()); // 用 vec 的内容替换 newVec 的内容
    //assign(size_type count, const T& value): 用 count 个值为 value 的元素替换当前 vector 的内容。
    vec.assign(5, 10); // 使用 5 个值为 10 的元素替换 vec 的内容
    return 0;
}

3. 迭代器

#include <iostream>
#include <vector>

int main() {
    vector<int> vec = {1, 2, 3, 4, 5};
    
    // 使用迭代器遍历 vector
    for (auto it = vec.begin(); it != vec.end(); ++it) 
    {
        cout << *it << " ";
    }
    cout << std::endl;
    
    return 0;
}

4. 容量操作

resize
    vector<int> vec = {1, 2, 3, 4, 5};
    cout << "Size before resize: " << vec.size() << endl;
    // resize 前的size
    vec.resize(8);
    // resize 后的size
    cout << "Size after resize: " << vec.size() << ndl;
    for (int num : vec) {
        cout << num << " ";
    }
    cout << endl;
reserve
	//改变 vector 的大小为 count,多余的元素被删除或者用默认值填充。
    vec.resize(10, 10);
    for (int num : vec) {
        cout << num << " ";
    }

	//将 vector 的容量调整为至少为 new_cap
	vec.reserve(10);
    cout << endl;

5. 访问元素

[] front back at
    vector<int> vec = {1, 2, 3};
    vec[0]		// 第一个元素
    vec.at(1)	// 第二个元素
    vec.front() // 返回第一个元素的引用。
    vec.back()	// 返回最后一个元素的引用。

6. 修改容器

assign
#include <iostream>
#include <vector>


    vector<int> vec;
    vec.assign({1, 2, 3, 4, 5});	//使用assign修改
    for (int num : vec) {
        cout << num << " ";
    }
    cout << endl;
push_back pop_back
    vector<int> vec = {1, 2, 3};
    vec.push_back(4);		// 在末尾插入元素
    for (int num : vec) {
        cout << num << " ";
    }
    cout << endl;
    vec.pop_back();			// 删除末尾元素
    for (int num : vec) {
        cout << num << " ";
    }
    cout << endl;
insert
	vector<int> vec = {1, 2, 3};
	//在 pos 位置之前插入一个元素,返回指向插入元素的迭代器。
    auto it = vec.insert(vec.begin() + 1, 5);
    	
    //在 pos 位置之前插入 count 个值为 value 的元素。
    vec.insert(it, 3, 6);	
    
    // 在 pos 位置之前插入迭代器范围内的元素。
    vec.insert(vec.end(), {7, 8, 9});	
    
    for (int num : vec) {
       	cout << num << " ";
    }
 	cout << endl;
erase
	vector<int> vec = {1, 2, 3, 4, 5};
	// 删除 pos 位置处的元素。
    vec.erase(vec.begin() + 2);

	// 删除指定范围内的元素。
    vec.erase(vec.begin() + 1, vec.begin() + 3);

    for (int num : vec) {
        cout << num << " ";
    }
    cout << endl;
clear
	vector<int> vec = {1, 2, 3};
	//删除 vector 的所有元素。
    vec.clear();
    cout << "Size after clear: " << vec.size() << endl;

7. 容器的其他操作

swap
	vector<int> vec1 = {1, 2, 3};
    vector<int> vec2 = {4, 5, 6};
    
    //交换当前 vector 和参数 vector 的内容。
    vec1.swap(vec2);
    
    for (int num : vec1) {
        cout << num << " ";
    }
    cout << endl;
    for (int num : vec2) {
        cout << num << " ";
    }
    cout << endl;

※ 如果文章对你有帮助的话,可以点赞收藏!!谢谢支持

  • 59
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一岁就可帅-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值