STL库之vector容器

vector的一些概述

  • vector具有内存自动管理功能,对于元素的插入和删除,可动态调整所占的内存空间。
  • #include

创建vector对象

  • 不指定容器的元素个数
vector<int> v;
  • 创建时,指定大小
vector<double> v(10);
  • 创建一个具有n个元素的向量容器对象,每个元素具有指定的初始值
vector<double> v(10. 8.6);

分割线


#include <iostream>
// vector库包含vector容器
#include <vector>
// 需要添加标准命名空间
using namespace std;
// 声明一个vector向量用于后续展现
vector<int> v;

访问vector元素方法

  • 数组形式的访问
cout << v[0] << endl;
  • 迭代器访问
// 声明一个迭代器*it
// 必须声明一个和上述类型一致的
// begin表示v的最开始的元素,end()就是最后一个元素后面的一个空间
vector<int>::iterator it = v.begin();

常用方法

  • 尾部插入 push_back()
v.push_back(10);
  • 元素插入 insert()
// 需要迭代器的作为索引,在迭代器前插入20这个元素
v.insert(it, 20);
  • 元素删除 erase()
// 删除it位置的单个元素
v.erase(it);
// 删除一片元素 it到it+5的位置,不包含it+5位置的元素
v.erase(it, it+5);
// 删除所有元素
v.erase(v.begin(), v.end());
  • 删除所有元素 clear()
v.clear();
  • 向量大小 size()
time_t nSize = v.size();
  • 是否为空 empty()
// true为空,false为非空
bool isEmpty = v.empty();

使用 algorithm 库中的sort()和 reverse()进行排序和反向排列

  • 对向量容器进行排序 sort()
// 将所有的v中元素由小到大排序
sort(v.begin(), v.end());
// 当然可以自己书写比较函数
// compare就是自己书写的比较函数,当然需要比较v对应的类型,返回其值即可
sort(v.begin(), v.end(), compare);
  • 对向量容器方向排列 reverse()
// 将v中整个容器中的元素颠倒排列
reverse(v.begin(), v.end());
// 将it到it+5的元素颠倒排序, 不包含it+5上的元素
reverse(it, it+5);

整体展现代码

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> v;

int main()
{
    // 尾部插入元素
    for (int i = 0; i < 10; ++i) 
        v.push_back(i);
    // 数组访问方式
    cout << "数组访问: ";
    for (int i = 0; i < v.size(); ++i) 
        cout << v[i] << " ";
    cout << endl;
    // 迭代器访问
    cout << "迭代器访问: ";
    for (vector<int>::iterator it = v.begin(); it != v.end(); ++it)
        cout << *it << " ";
    cout << endl;
    // 插入元素在容器首部
    v.insert(v.begin(), 20);
    cout << "插入元素后: ";
    for (vector<int>::iterator it = v.begin(); it != v.end(); ++it)
        cout << *it << " ";
    cout << endl;
    // 删除首个元素 和 删除最后五个元素
    v.erase(v.begin());
    cout << "删除首个元素后: ";
    for (vector<int>::iterator it = v.begin(); it != v.end(); ++it)
        cout << *it << " ";
    cout << endl;

    v.erase(v.end() - 5, v.end());
    cout << "删除最后五个元素后: ";
    for (vector<int>::iterator it = v.begin(); it != v.end(); ++it)
        cout << *it << " ";
    cout << endl;
    // 数组大小
    cout << "向量大小: " << v.size() << endl;
    // 是否为空
    if (!v.empty()) cout << "向量不为空" << endl;
    // 反向排序
    reverse(v.begin(), v.end());
    cout << "反向排列后: ";
    for (vector<int>::iterator it = v.begin(); it != v.end(); ++it)
        cout << *it << " ";
    cout << endl;
    // 排序后
    sort(v.begin(), v.end());
    cout << "排序后: ";
    for (vector<int>::iterator it = v.begin(); it != v.end(); ++it)
        cout << *it << " ";
    cout << endl;
    // 清除所有
    v.clear();
    if (v.empty()) cout << "清除所有,向量为空" << endl;


    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_36984327/article/details/80445537
今日推荐