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>

 

目录
相关文章
|
9月前
|
算法 C++ 容器
C++标准库(速查)总结
C++标准库(速查)总结
206 6
|
9月前
|
存储 算法 C++
C++ STL 初探:打开标准模板库的大门
C++ STL 初探:打开标准模板库的大门
196 10
|
5月前
|
存储 缓存 C++
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
C++ 标准模板库(STL)提供了一组功能强大的容器类,用于存储和操作数据集合。不同的容器具有独特的特性和应用场景,因此选择合适的容器对于程序的性能和代码的可读性至关重要。对于刚接触 C++ 的开发者来说,了解这些容器的基础知识以及它们的特点是迈向高效编程的重要一步。本文将详细介绍 C++ 常用的容器,包括序列容器(`std::vector`、`std::array`、`std::list`、`std::deque`)、关联容器(`std::set`、`std::map`)和无序容器(`std::unordered_set`、`std::unordered_map`),全面解析它们的特点、用法
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
|
6月前
|
XML 网络协议 API
超级好用的C++实用库之服务包装类
通过本文对Boost.Asio、gRPC和Poco三个超级好用的C++服务包装类库的详细介绍,开发者可以根据自己的需求选择合适的库来简化开发工作,提高代码的效率和可维护性。每个库都有其独特的优势和适用场景,合理使用这些库可以极大地提升C++开发的生产力。
145 11
|
9月前
|
存储 搜索推荐 C++
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
167 2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
|
9月前
|
存储 程序员 C++
C++常用基础知识—STL库(2)
C++常用基础知识—STL库(2)
139 5
|
9月前
|
存储 自然语言处理 程序员
C++常用基础知识—STL库(1)
C++常用基础知识—STL库(1)
154 1
|
8月前
|
存储 设计模式 C++
【C++】优先级队列(容器适配器)
本文介绍了C++ STL中的线性容器及其适配器,包括栈、队列和优先队列的设计与实现。详细解析了`deque`的特点和存储结构,以及如何利用`deque`实现栈、队列和优先队列。通过自定义命名空间和类模板,展示了如何模拟实现这些容器适配器,重点讲解了优先队列的内部机制,如堆的构建与维护方法。
121 0
|
9月前
|
存储 C++ 容器
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器1
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
152 5
|
9月前
|
存储 编译器 C++
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
166 2