C++标准库容器的使用

简介: C++标准库容器的使用

在C++编程中,标准库容器是编程人员日常工作中不可或缺的工具。这些容器提供了对数据的抽象存储和操作,使得我们可以专注于实现程序的逻辑,而无需担心底层的数据存储和访问细节。本文将介绍C++标准库中的一些主要容器,包括它们的特点、使用方法和一些最佳实践。

1. 容器概述

C++标准库提供了多种类型的容器,每种容器都有其特定的用途和优势。以下是一些常用的容器:

· 序列容器:用于存储同一类型的元素,并且可以通过索引访问元素。常见的序列容器有vectordequelistforward_listarraystring(尽管string主要用于存储字符序列,但也可以视为一种序列容器)。

· 关联容器:用于存储键值对,并根据键来存储和检索元素。常见的关联容器有setmultisetmapmultimap

· 容器适配器:对序列容器进行封装,提供不同的接口或行为。常见的容器适配器有stackqueuepriority_queue

2. 序列容器

2.1 vector

vector是一个动态数组,可以容纳任意数量的元素。它支持随机访问,即可以在常数时间内访问任何元素。vector在尾部添加或删除元素通常很快,但在头部或中间插入或删除元素可能较慢,因为可能需要重新分配内存并移动元素。

示例:

cpp复制代码

 

#include <iostream> 

 

#include <vector> 

 

 

 

int main() {

 

std::vector<int> v = {1, 2, 3, 4, 5};

 

std::cout << "Element at index 2: " << v[2] << std::endl;

 

v.push_back(6); // Add element to the end

 

std::cout << "Size of vector: " << v.size() << std::endl;

 

return 0;

 

}

2.2 list

list是一个双向链表,可以在任何位置快速插入或删除元素。但它不支持随机访问,访问元素需要从头或尾开始遍历。

示例:

cpp复制代码

 

#include <iostream> 

 

#include <list> 

 

 

 

int main() {

 

std::list<int> l = {1, 2, 3, 4, 5};

 

l.push_front(0); // Add element to the beginning

 

l.push_back(6); // Add element to the end

 

std::cout << "First element: " << l.front() << std::endl;

 

std::cout << "Last element: " << l.back() << std::endl;

 

return 0;

 

}

3. 关联容器

3.1 set

set是一个包含唯一元素的集合,每个元素都有一个唯一的键。set中的元素默认按升序排序。

示例:

cpp复制代码

 

#include <iostream> 

 

#include <set> 

 

 

 

int main() {

 

std::set<int> s = {3, 1, 4, 1, 5, 9, 2};

 

for (const auto& elem : s) {

 

std::cout << elem << ' ';

 

}

 

std::cout << std::endl; // Output: 1 2 3 4 5 9

 

return 0;

 

}

3.2 map

map是一个关联数组或哈希表,它包含键值对,并允许通过键来快速检索值。map中的元素默认按键的升序排序。

示例:

cpp复制代码

 

#include <iostream> 

 

#include <map> 

 

 

 

int main() {

 

std::map<std::string, int> m = {{"apple", 1}, {"banana", 2}, {"cherry", 3}};

 

m["orange"] = 4; // Add a new element

 

std::cout << "Number of apples: " << m["apple"] << std::endl;

 

return 0;

 

}

4. 容器适配器

4.1 stack

stack是一个后进先出(LIFO)的数据结构,通常基于dequelist实现。它只提供了对栈顶元素的访问和操作。

示例:

cpp复制代码

 

#include <iostream> 

 

#include <stack>

 

目录
相关文章
|
10天前
|
存储 自然语言处理 安全
C++ STL标准库 《string原理与实战分析》
C++ STL标准库 《string原理与实战分析》
16 0
|
2天前
|
存储 算法 C++
C++一分钟之-容器概览:vector, list, deque
【6月更文挑战第21天】STL中的`vector`是动态数组,适合随机访问,但插入删除非末尾元素较慢;`list`是双向链表,插入删除快但随机访问效率低;`deque`结合两者优点,支持快速双端操作。选择容器要考虑操作频率、内存占用和性能需求。注意预分配容量以减少`vector`的内存重分配,使用迭代器而非索引操作`list`,并利用`deque`的两端优势。理解容器内部机制和应用场景是优化C++程序的关键。
18 5
|
2天前
|
存储 算法 C++
C++一分钟之-标准模板库(STL)简介
【6月更文挑战第21天】C++ STL是高效通用的算法和数据结构集,简化编程任务。核心包括容器(如vector、list)、迭代器、算法(如sort、find)和适配器。常见问题涉及内存泄漏、迭代器失效、效率和算法误用。通过示例展示了如何排序、遍历和查找元素。掌握STL能提升效率,学习过程需注意常见陷阱。
20 4
|
6天前
|
算法 前端开发 Linux
【常用技巧】C++ STL容器操作:6种常用场景算法
STL在Linux C++中使用的非常普遍,掌握并合适的使用各种容器至关重要!
33 10
|
2天前
|
存储 算法 NoSQL
C++一分钟之-map与set容器详解
【6月更文挑战第21天】C++ STL的`map`和`set`是基于红黑树的关联容器,提供有序存储和高效查找。`map`存储键值对,键唯一,值可重复;`set`仅存储唯一键。两者操作时间复杂度为O(log n)。常见问题包括键的唯一性和迭代器稳定性。自定义比较函数可用于定制排序规则,内存管理需注意适时释放。理解和善用这些工具能提升代码效率。
10 3
|
9天前
|
大数据 C++ 索引
C++ STL标准库 《vector向量原理与实战分析》
C++ STL标准库 《vector向量原理与实战分析》
11 0
|
10天前
|
C++ 容器
C++ STL标准库 《queue单向队列原理与实战分析》
C++ STL标准库 《queue单向队列原理与实战分析》
14 0
|
3天前
|
C++
C++一分钟之-类与对象初步
【6月更文挑战第20天】C++的类是对象的蓝图,封装数据和操作。对象是类的实例。关注访问权限、构造析构函数的使用,以及内存管理(深拷贝VS浅拷贝)。示例展示了如何创建和使用`Point`类对象。通过实践和理解原理,掌握面向对象编程基础。
30 2
C++一分钟之-类与对象初步
|
4天前
|
存储 编译器 C++
|
3天前
|
C++
C++类和类模板——入门
C++类和类模板——入门
9 1

热门文章

最新文章