欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

【C++容器整理】vector可变长动态数组

时间:2023-07-19

目录

前言

一、vector 特点

二、c++ 中使用

1、头文件

2、初始化

3、访问元素

4、获得 vector 的属性

5、增删改元素

6、特殊

参考文章


前言

本文章为学习过程中的总结,部分参考文章已附文末,欢迎内容上、排版上、表达上各种批评指正。


一、vector 特点

是顺序容器,支持随机访问;尾部添加元素时无需重新分配空间;T(访问) = a;初始创建时容量为 0,谨防数组越界;

二、c++ 中使用

1、头文件

#include

2、初始化

1)//容量缺省默认为 0,值缺省默认为 0

vector var_name [(容量,值)];

2) // 初始化拷贝

vector var_name (另一个同类 vector);

或 vector var_name = 另一个同类 vector;

3)//直接赋值

vector var_name = {elem1, elem2, elem3,};

4)//切片获取另一个 vector 的局部/全部

vector var_name(another_vector.begin(), another_vector.end());

3、访问元素

1)创建迭代器访问

vector::iterator i;//正向迭代器,i++
vector::reverse_iterator j;//反向迭代器,j--
*i;//访问对应的元素值

2)迭代器定位

(正向迭代器)定位开头:i = var_name.begin();(正向迭代器)末尾:i = var_name.end() - 1;//end() 返回最后一个元素后面位置的迭代器;(反向)末尾:j = var_name.rbegin();(反向)开头:j = var_name.rend();

3) 随机访问

在容量已知的情况下可以利用 var_name[k] 访问第 k + 1 个元素(k 从 0 开始);

不知道容量的话小心越界。

4) 头尾快速访问

var = var_name.front();var = var_name.back();

5) 遍历

(正向迭代器)

for(i = var_name.begin(); i != var_name.end(); i++){

        cout<< *i;

}

(反向迭代器倒着输出)

for(j = var_name.rbegin(); i != var_name.rend(); j++){

        cout<< *j;

}

(随机访问)

for(int k = 0; k < var_name.size(); k++){

        cout<< var_name[k];

}

4、获得 vector 的属性

1)判空 var_name.empty(); // 空返回 true

2)大小 var_name.size();

5、增删改元素

1)末尾增加元素 var_name.push_back(elem1)

等同于 var_name.emplace(elem1) // 据说更高效

2) 定位插入(3 类)

iterator insert( iterator loc, const TYPE &val ); //在指定迭代器位置插入某值,返回插入值的迭代器void insert( iterator loc, size_type num, const TYPE &val ); //要插入的迭代器位置,插入元素数量,元素的值void insert( iterator loc, input_iterator start, input_iterator end ); //要插入的迭代器位置,插入元素迭代器起始~结束位置,便于插入某一段的元素进去

3)删除末尾 var_name.pop_back()

4)清空 var_name.clear()

5)定位删除

iterator erase(iterator position); // 指定某个迭代器的值删除iterator erase(iterator first, iterator last); // 制定一段区间删除

6)修改:访问后直接改值;

6、特殊

交换 var_name.swap(& another_vector);


参考文章

C++:vector 六种初始化方法 - 简书

[c++] vector中insert()的用法详解_turry的博客-CSDN博客_vector的insert

vector的remove和erase函数的区别_xzymmd的博客-CSDN博客_vector.erase

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。