C++ vector学习笔记
时间:2022-07-22
本文章向大家介绍C++ vector学习笔记,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
vector
vector是表示可变大小数组的序列容器,即动态顺序表
像数组一样,vector也采用连续得到存储空间来存储元素,可以使用下标访问
又不像数组,vector大小可以动态改变,而且大小会被容器自动处理
初始化
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int>v{ 0,1,2,3,4,5,6,7 }; //0 1 2 3 4 5 6 7
//从数组中获得初始值
vector<int> v1(10); //
//定义了10个整型元素的向量
//尖括号为元素类型名,没有给初始值
vector<int>v2(10, 1); //1 1 1 1 1 1 1 1 1 1
//定义了10个整型元素的向量,且初始值为1
vector<int>v3(v); //0 1 2 3 4 5 6 7
//用v向量来创建v3,使v3和v一样
vector<int>v4(v.begin(), v.begin()+3); //0 1 2
//基于迭代器的初始化,左闭右开
}
非更易型操作(Nonmodifying Operating)
不改变容器内元素的操作
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int>a{ 1,2,3,4,5 };
cout << a.size() << endl; //5
//返回当前元素个数
cout << a.empty() << endl; //0
//判空,相当于size()==0
cout << a.capacity() << endl; //5
//返回容器当前最大容量
a.reserve(100); //若容量不足,则扩容为100
cout << a.size() << endl; //5
cout << a.capacity() << endl; //100
a.shrink_to_fit(); //降低容量,使capacity()=size()
cout << a.capacity() << endl; //5
}
赋值操作
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int>b{ 1,2,3,4,5 };
vector<int>c;
c = b; //1 2 3 4 5
//将b的全部元素赋值给c
c.assign(5, 1); //1 1 1 1 1
//给c赋值5个1
c.assign(b.begin(), b.end()-1); //1 2 3 4
//基于迭代器的赋值,左闭右开
c.swap(b); //b:1 2 3 4 c:1 2 3 4 5
//置换b,c的数据
swap(b, c); //b:1 2 3 4 5 c:1 2 3 4
//置换b,c的数据
}
元素访问
只有at()会检查边界,若越界,抛出 out_of_range 异常
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int>d{ 0,1,2,3,4,5 };
cout << d[2] << endl; //2
//返回索引所指向的元素
cout << d.at(2) << endl; //2
//返回索引所指向元素,会进行边界检查
cout << d.front() << endl; //0
//返回第一个元素
cout << d.back() << endl; //5
//返回最后一个元素
}
插入和移除
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int>e{ 1,2,3 };
e.push_back(4); //1 2 3 4
//在末尾添加元素 4
e.pop_back(); //1 2 3
//移除末尾元素,不返回该元素
e.insert(e.begin()+1, 2); //1 2 2 3
//在begin()+1位置插入2
e.insert(e.begin() + 1, 3, 5); //1 5 5 5 2 2 3
//在begin()+1位置插入3个5
e.insert(e.begin(), e.begin(), e.begin() + 2); //1 5 1 5 5 5 2 2 3
//在begin()位置插入前两个元素
e.erase(e.begin()+1); //1 1 5 5 5 2 2 3
//移除begin()+1位置的元素,返回下一个元素的位置
e.erase(e.begin() + 1, e.begin() + 6); //1 2 3
//移除begin()+1到begin()+6所指向的元素,左闭右开,返回下一个元素的位置
e.clear(); //清空
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 基于云原生系统的应用分发系统设计
- vue实现文字表情同时输入的方法
- 不同类型的ABAP内表读写性能比较
- JavaScript和ABAP的MD5计算源代码
- 读取SAP CRM One Order应用日志的优化方式
- 悟空活动中台 - 基于 WebP 的图片高性能加载方案
- DES ECB加解密的Java实现
- win10 uwp 不显示 SplashScreen 欢迎界面的方法
- WPF 在 XAML 写 C# 代码
- 解析 HashMap源码值概括
- 解析 HashMap 源码之基本操作
- Docker手册
- 小知识:TFA收集日志报错空间不足
- Java SPI 居然这么多知名框架在用
- Ceph 入门到实战之 RBD 块存储接口