C++标准模板库(STL)vector顺序容器
一. 定义与基本概念
在C++的标准模板库(STL)中,vector是一个顺序容器,表示可以改变大小的数组。它提供了随机访问元素的能力,并且在末尾添加或删除元素的操作相对高效。
vector位于<vector>头文件中,要使用vector,需要包含该头文件,例如:#include <vector>。
二. 创建vector对象
默认构造:可以创建一个空的vector对象。例如,std::vector<int> v;创建了一个空的、用于存储int类型元素的vector。
指定大小构造:可以创建一个具有特定大小的vector,并可以选择初始化元素的值。例如,std::vector<int> v(5);创建了一个包含5个int类型元素的vector,这些元素会被默认初始化(对于基本类型,如int,会初始化为0);std::vector<int> v(5, 10);则创建了一个包含5个元素且每个元素都初始化为10的vector。
从其他容器初始化:可以使用另一个容器(如数组)来初始化vector。例如:
int arr[] = {1, 2, 3}; std::vector<int> v(arr, arr + sizeof(arr)/sizeof(arr[0]));
这里使用数组arr的元素来初始化vector v。
三. vector的基本操作
1. 元素访问
使用[]运算符:可以通过[]运算符来访问vector中的元素,就像访问数组元素一样。例如,v[0]表示访问vector v的第一个元素。但是要注意,使用[]运算符访问元素时,不会进行边界检查,如果访问超出范围的索引,会导致未定义行为。
使用at()方法:at()方法也用于访问元素,但它会进行边界检查,如果访问超出范围的索引,会抛出std::out_of_range异常。例如,v.at(0)表示访问vector v的第一个元素。
2. 添加元素
push_back():在vector的末尾添加一个元素。例如,v.push_back(10);会在vector v的末尾添加一个值为10的元素。
insert()(在指定位置插入元素):可以在vector的指定位置插入一个或多个元素。例如,v.insert(v.begin() + 2, 20);会在vector v的第3个元素(索引为2)的位置插入一个值为20的元素;v.insert(v.begin(), 3, 30);会在vector的开头插入3个值为30的元素。
3. 删除元素
pop_back():删除vector末尾的一个元素。例如,v.pop_back();会删除vector v的最后一个元素。
erase()(删除指定位置的元素):可以删除vector中指定位置的元素。例如,v.erase(v.begin() + 1);会删除vector v的第2个元素(索引为1)。
4. 获取vector的大小和容量
size():返回vector中当前元素的个数。例如,v.size()会得到vector v中元素的数量。
capacity():返回vector在不重新分配内存的情况下能够容纳的最大元素数量。例如,v.capacity()会得到vector v的容量。通常,当vector中的元素数量达到容量时,再添加元素会导致vector重新分配内存,这可能是一个比较耗时的操作。
四. vector的特性与注意事项
内存分配与重新分配:vector会根据需要自动管理内存。当添加元素时,如果当前的容量不足以容纳新元素,vector会重新分配一块更大的内存空间,将原来的元素复制到新空间,并释放原来的内存。这个过程可能会比较耗时,特别是对于大型的vector。
迭代器失效:在对vector进行某些操作(如插入、删除元素)时,可能会导致迭代器失效。例如,在使用erase()方法删除元素后,指向被删除元素之后的迭代器都会失效。因此,在进行这些操作后,如果需要继续使用迭代器,需要重新获取有效的迭代器。
数据存储的连续性:vector中的元素在内存中是连续存储的,这使得它可以像数组一样进行高效的随机访问,但在中间插入或删除元素时,需要移动后面的元素,相对来说效率较低。
C++编程语言基础
- C++:从入门到工作的教程
- 这是我的第一个 C++程序!
- C++中main函数有什么作用?
- C++中 #include 指令的作用
- C++中常用的预处理指令
- C++中 iostream 头文件定义了什么
- C++名称空间(namespace)
- C++标准库中 std 命名空间定义了些什么
- C++常用的头文件
- C++源代码的发布方式
- C++变量名的定义、变量的作用、使用规范
- C++的关键字列表
- C++数据类型:整型(整数类型)
- 二进制补码、原码、反码
- C++数据类型:char字符型(整数类型)
- ASCII码表及C++字符函数库(cctype)
- 计算机汉字编码
- C++数据类型:bool类型(整数类型)
- C++中 const 限定符
- C++数据类型:浮点数
- C++运算符:算术运算符
- C++运算符:类型转换规则
- 计算机数据存储大小端模式
- C++运算符:位运算 与 bitset类库
- C++运算符:关系运算符与逻辑运算符
- C++流程控制:顺序、选择、循环、跳转语句
- C++函数的定义、参数传递、重载、嵌套
- C++数组:一维、二维、多维数组的运用
- C-style字符串、库函数 与 std::string对象
- C++数据类型:结构体(struct)
- C++数据类型:联合体(union)
- C++数据类型:枚举(enum)
- C++数据类型别名:typedef
- C++指针
- C++内存操作符:new分配 与 delete释放
- C++标准模板库(STL)容器、算法、迭代器
- C++标准模板库(STL)vector顺序容器
- C++标准模板库(STL)array固定容器
- C++标准模板库(STL)list双向链表容器
- C++标准模板库(STL)deque双端队列
- C++标准模板库(STL)集合 set 关联容器
- C++标准模板库(STL)map关联容器
- C++标准模板库(STL)unordered_set
- C++标准模板库(STL)unordered_map
- C++标准模板库(STL)algorithm算法库
- C++文件操作
- C++数学库(cmath)数学常量与数学函数
- C++模板:函数模板、类模板
- C++与SQLite3联合打造实用的应用程序
- C++实战开发中常用的库(概述)
- 第二部分:C++面向对象编程
- C++:类的定义与声明、类对象应用
- 第三部分:数据结构与算法(概述)
- 第一部分:C++语言简介与学习路线