vector

vector是 C++ 标准模板库(STL)中最常用的动态数组,它和普通数组的区别:

1.普通数组大小固定,声明后无法修改;

2.vector 大小可以动态增长 / 缩减,自动管理内存(无需手动申请 / 释放,减少内存泄漏风险)。

使用vector必须引用vector头文件

#include <vector>

1 定义与初始化

vector是一个模板类,使用时需要提供具体类型进行实例化

int main()
{
    vector<int> v1;
    vector<double>v2;
    return 0;
}
初始化 vector 的方法 含义
vector<T> v1 v1 是一个存放 T 类型数据的空 vector
vector<T> v2(v1) 利用 v1 构造 v2,v2 包含 v1 的所有数据
vector<T> v2 = v1 同上
vector<T> v3(n, val) v3 包含 n 个 val
vector<T> v4(n) v4 包含 n 个默认 T 类型的数据
vector<T> v5{a,b,c,...} v5 包含初始化列表提供的数据
vector<T> v5 = {a,b,c,...} 同上
void Show(const vector<int>& v)
{
    for (const auto& x : v)
        cout << x << " ";
    cout << endl;
}

int main()
{
    vector<int> v1;
    v1.push_back(1);
    v1.push_back(2);
    v1.push_back(3);
    cout << "v1:";
    Show(v1);

    vector<int>v2(v1);
    cout << "v2:";
    Show(v2);

    vector<int>v22 = v1;
    cout << "v22:";
    Show(v22);

    vector<int>v3(10, 2);
    cout << "v3:";
    Show(v3);

    vector<int>v4(5);
    cout << "v4:";
    Show(v4);

    vector<int>v5{ 1,2,3,4,5 };
    cout << "v5:";
    Show(v5);

    vector<int>v55 = { 6,7,8,9,10 };
    cout << "v55:";
    Show(v55);

    return 0;
}

2 vector常用迭代器

迭代器 含义
v.begin() 第一个元素的迭代器
v.end() 最后一个元素的下一个位置迭代器
v.cbegin() 第一个元素的常量迭代器
v.cend() 尾后常量迭代器
v.rbegin() 从后往前的第一个迭代器
v.rend() 从后往前的最后一个迭代器

3 vector常用运算符

运算符 含义
v2 = v1 把 v1 的数据赋值给 v2
v1 == v2 判断是否相等,索引元素相等
v1 != v2 判断是否不相等
<, <=, >, >= 判断大小关系,从头到尾依次比较
v1[i] 返回 v1 第 i 个元素的引用,从 0 开始
int main()
{
    vector<int>v1{ 1,2,3,4,5 };
    vector<int>v2 = v1;
    cout << "v1:";
    Show(v1);
    cout << "v2:";
    Show(v2);

    if (v1 == v2)
        cout << "v1==v2" << endl;

    v1[2] = 10;
    cout << "v1:";
    Show(v1);

    if (v1 != v2)
        cout << "v1!=v2" << endl;

    if (v1 < v2)
        cout << "v1<v2" << endl;
    else if (v1 > v2)
        cout << "v1>v2" << endl;
    else
        cout << "v1==v2" << endl;

    return 0;
}

vector 对象不能用 + 运算,也不能通过 << 整体输出所有数据,需要用循环输出。

4 vector常用成员函数

vector v 的成员函数 含义 vector v 的成员函数 含义
v.assign() 重新赋值数据,可使用 = 替代 v.erase() 删除一个或多个元素
v.empty() 判断是否为空 v.push_back() 尾插
v.size() 返回 v 的数据个数 v.pop_back() 尾删
v.capacity() 返回 v 当前的容量 v.swap() 交换两个 vector 的值
v.front() 返回第一个元素的引用 v.clear() 清空数据
v.back() 返回最后一个元素的引用 v.resize() 指定数据个数
v.insert() 删除一个或多个元素 v.shrink_to_fit() 容量紧缩

assign成员函数

清除原来的数据,并重新赋值新的数据

int main()
{
    vector<int> v1, v2, v3;

    v1.push_back(10);
    v1.push_back(20);
    v1.push_back(30);
    v1.push_back(40);
    v1.push_back(50);

    cout << "v1 = ";
    Show(v1);

    v2.assign(v1.begin(), v1.end());
    cout << "v2 = ";
    Show(v2);

    v3.assign(7, 4); // v3赋值为7个4
    cout << "v3 = ";
    Show(v3);

    v3.assign({5, 6, 7}); // v3赋值为5,6,7
    cout << "v3 = ";
    Show(v3);

    return 0;
}

empty成员函数

判断向量对象是否为空。

size成员函数

获取向量对象中存放的数据个数。

capacity成员函数

向量对象当前开辟的总容量。注意不是数据个数,一般容量≥数据个数,系统根据数据个数自动调整容量大小。

clear成员函数

清空所有数据

int main()
{
    vector<int> v1{1,2,3,4,5};
    cout << "v1:";
    Show(v1);

    cout << "v1的数据个数:" << v1.size() << endl;
    cout << "v1当前容量:" << v1.capacity() << endl;

    v1.push_back(6); // 尾插6
    cout << "尾插数据后,v1的数据个数:" << v1.size() << endl;
    cout << "尾插数据后,v1当前容量:" << v1.capacity() << endl;

    v1.clear(); // 清空数据
    cout << "清空后,v1的数据个数:" << v1.size() << endl;
    cout << "清空后,v1当前容量:" << v1.capacity() << endl;

    if (v1.empty())
        cout << "v1是空的" << endl;

    return 0;
}

front成员函数

返回 v 第一个元素的引用,作用和 v [0] 相同,注意不能用于空向量。

int main()
{
    vector<int> v{1,2,3,4,5};
    cout << v.front() << endl;

    v.clear();

    return 0;
}

back成员函数

返回 v 最后一个元素的引用,作用和 v [v.size ()-1] 相同,注意不能用于空向量。

int main()
{
    vector<int> v{1, 2, 3, 4, 5};
    cout << v.back() << endl;
    cout << v[v.size() - 1] << endl;

    v.clear();

    return 0;
}

insert成员函数

在指定位置插入一个或者多个元素。

int main()
{
    vector<int> v1{1,2,3};
    cout << "v1:";
    Show(v1);

    v1.insert(v1.begin() + 1, 10);
    cout << "v1:";
    Show(v1);

    v1.insert(v1.begin() + 2, 4, 20);
    cout << "v1:";
    Show(v1);

    vector<int> v2{1,2,3,4,5};
    vector<int> v3{100, 200, 300};
    v2.insert(v2.begin()+1, v3.begin(), v3.end());
    cout << "v2:";
    Show(v2);

    return 0;
}

erase成员函数

删除一个或多个元素

int main()
{
    vector<int> v1{1,2,3,4,5};
    cout << "v1 = ";
    Show(v1);

    v1.erase(v1.begin());
    cout << "v1 = ";
    Show(v1);

    v1.erase(v1.begin() + 1, v1.begin() + 3);
    cout << "v1 = ";
    Show(v1);

    return 0;
}

push_back成员函数

尾部插入一个数据

int main()
{
    vector<int> v;
    for (int i = 0; i < 10; i++)
        v.push_back(i);
    cout << "v:";
    Show(v);

    vector<string> v2;
    v2.push_back("你好");
    v2.push_back("再见");
    for (const auto& x : v2)
        cout << x << endl;

    return 0;
}

pop_back成员函数

删除向量尾部元素

int main()
{
    vector<int> v{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    while (!v.empty())
    {
        cout << v.back() << " ";
        v.pop_back();
    }
    cout << endl;
    return 0;
}

swap成员函数

交换两个向量的所有元素

int main()
{
    vector<int>v1{1,2,3,4,5};
    vector<int>v2{10,20,30};

    cout << "v1:";
    Show(v1);
    cout << "v2:";
    Show(v2);

    v1.swap(v2);

    cout << "交换后:" << endl;
    cout << "v1:";
    Show(v1);
    cout << "v2:";
    Show(v2);

    return 0;
}

resize成员函数

为向量指定新的数据个数大小。如果新的大小大于原来的大小,则会在向量末尾添加数据,数据的值为默认值。如果新的大小小于原来的大小,则删除向量末尾多余元素。如果新的大小等于原来的大小则什么也不做。

int main()
{
    vector<int>v1{1, 2, 3, 4, 5};
    cout << "v1:";
    Show(v1);
    cout << endl;

    v1.resize(10);
    cout << "将v1的数据个数设为10后:" << endl;
    cout << "v1:";
    Show(v1);
    cout << endl;

    v1.resize(3);
    cout << "将v1的数据个数设为3后:" << endl;
    cout << "v1:";
    Show(v1);

    return 0;
}

shrink_to_fit成员函数

收缩容量,使容量和数据个数相同

int main()
{
    vector<int> v1{1,2,3,4,5,6,7,8,9,10};
    cout << "初始,数据个数:" << v1.size() << ",容量:" << v1.capacity() << endl;

    v1.pop_back();
    v1.pop_back();
    v1.pop_back();
    cout << "删除3个数据后,数据个数:" << v1.size() << ",容量:" << v1.capacity() << endl;

    v1.shrink_to_fit();
    cout << "收缩容量后,";
    cout << "数据个数:" << v1.size() << ",容量:" << v1.capacity() << endl;

    return 0;
}

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐