C++ STL丨vector 基本使用(一)

C++ STL丨vector 基本使用(一)


1 vector 向量

  向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器。 与string相同, vector 同属于STL(Standard Template Library, 标准模板库)中的一种自定义的数据类型, 可以广义上认为是数组的增强版。
vector

2 使用速查表

函数解释
vector<Elem> c创建一个空的vector
c.insert(pos, elem)在pos位置插入一个elem拷贝,传回新数据位置
c.insert(pos,n,elem)在pos位置插入n个elem数据。无返回值
c.insert(pos,beg,end)在pos位置插入在[beg,end)区间的数据。无返回值
c.pop_back()删除最后一个数据
c.push_back(elem)在尾部加入一个数据
c.erase(pos)删除pos位置的数据,传回下一个数据的位置
c.erase(beg,end)删除[beg,end)区间的数据,传回下一个数据的位置
c.assign(beg, end)将[beg; end)区间中的数据赋值给c
c.assign(n, elem)将n个elem的拷贝赋值给c
c.at(idx)传回索引idx所指的数据,如果idx越界,抛出out_of_range
c.back()传回最后一个数据,不检查这个数据是否存在
c.begin()传回迭代器中的第一个位置
c.capacity()返回容器中数据的个数
c.clear()移除数据中所有数据
c.empty()判断容器是否为空
c.end()返回容器的最后一个元素后面的元素的迭代器
c.front传回第一个数据
c.max_size()返回容器中最大元素数
c.rbegin()传回一个逆向队列的第一个数据
c.rend()传回一个逆向队列的最后一个数据的下一个位置
c.resize(num)重新指定队列的长度
c.reserve()保留适当的容量
c.size()返回容器中实际数据的个数
c.data()指向底层元素存储的指针。对于非空容器,返回的指针比较等于第一个元素的地址。
c1.swap(c2)将c1和c2元素互换

3 详细使用

3.1 vector 初始化

vector 初始化:

vector<int> v;					//初始化v
vector<int> v(10, 1);			//v中初始化10个1
vector<int> v(v1);				//将v1拷贝给v
vector<int> v(v1.beg, v2.end);	//将v1中第一个到结束,拷贝给v

3.2 vector 插入

insetr 使用:

#include <iostream>
#include <vector>
 
void print_vec(const std::vector<int>& vec)
{
    for (auto x: vec) {
         std::cout << ' ' << x;
    }
    std::cout << '\n';
}
 
int main ()
{
    std::vector<int> vec(3,100);		//初始化3个100 
    print_vec(vec);
 
    auto it = vec.begin();
    it = vec.insert(it, 200);			//第一个位置插入 200
    print_vec(vec);
 
    vec.insert(it,2,300);				//it位置插入 2 个 300
    print_vec(vec);
 
    // "it" no longer valid, get a new one:
    it = vec.begin();					//插入之后未返回值,需要重新赋值
 
    std::vector<int> vec2(2,400);
    vec.insert(it+2, vec2.begin(), vec2.end());
    print_vec(vec);
 
    int arr[] = { 501,502,503 };
    vec.insert(vec.begin(), arr, arr+3);
    print_vec(vec);
}

输出:

100 100 100
200 100 100 100
300 300 200 100 100 100
300 300 400 400 200 100 100 100
501 502 503 300 300 400 400 200 100 100 100

3.3 vector 遍历

vector<int> v(3, 2);
for (auto i : v)			//使用新特性遍历
	cout << v[i] << endl;

for (auto&& i : v)			//右值引用 lambda表达式
	cout << v[i] << endl;

for (int i = 0; i < v.size(); i++)	//使用下标
	cout << v[i] << endl;

// 使用迭代器
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
	cout << *it << endl;

3.4 vector 插入和删除

push_back() 和 pop_back() 使用:

vector<int> n;
n.push_back(2);		//尾插入2
n.push_back(4);		//尾插入4, 当前元素为2 4

n.pop_back();		//弹出尾元素,当前元素为 2

3.5 vector 删除指定元素

erase 使用:

#include <vector>
#include <iostream>
int main( )
{
    std::vector<int> c{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    for (auto &i : c) {
        std::cout << i << " ";
    }
    std::cout << '\n';
 
    c.erase(c.begin());					//删除第一个元素
 
    for (auto &i : c) {
        std::cout << i << " ";
    }
    std::cout << '\n';
 
    c.erase(c.begin()+2, c.begin()+5);	//删除下标[2,5)之间元素
 
    for (auto &i : c) {
        std::cout << i << " ";
    }
    std::cout << '\n';
 
    // Erase all even numbers (C++11 and later)
    for (auto it = c.begin(); it != c.end(); ) { 	//删除偶数
        if (*it % 2 == 0) {
            it = c.erase(it);
        } else {
            ++it;
        }
    }
    for (auto &i : c) {
        std::cout << i << " ";
    }
    std::cout << '\n';
}

输出:

0 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 6 7 8 9
1 7 9

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值