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>

 

目录
相关文章
|
2月前
|
算法 C++ 容器
C++标准库(速查)总结
C++标准库(速查)总结
82 6
|
2月前
|
存储 算法 C++
C++ STL 初探:打开标准模板库的大门
C++ STL 初探:打开标准模板库的大门
120 10
|
1月前
|
存储 设计模式 C++
【C++】优先级队列(容器适配器)
本文介绍了C++ STL中的线性容器及其适配器,包括栈、队列和优先队列的设计与实现。详细解析了`deque`的特点和存储结构,以及如何利用`deque`实现栈、队列和优先队列。通过自定义命名空间和类模板,展示了如何模拟实现这些容器适配器,重点讲解了优先队列的内部机制,如堆的构建与维护方法。
35 0
|
2月前
|
存储 搜索推荐 C++
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
66 2
|
2月前
|
存储 程序员 C++
C++常用基础知识—STL库(2)
C++常用基础知识—STL库(2)
83 5
|
2月前
|
存储 自然语言处理 程序员
C++常用基础知识—STL库(1)
C++常用基础知识—STL库(1)
77 1
|
2月前
|
存储 C++ 容器
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器1
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
71 5
|
2月前
|
存储 编译器 C++
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
82 2
|
2月前
|
设计模式 存储 C++
【C++】C++ STL探索:容器适配器 Stack 与 Queue 的使用及模拟实现(二)
【C++】C++ STL探索:容器适配器 Stack 与 Queue 的使用及模拟实现
|
2月前
|
存储 C++ 容器
【C++】C++ STL探索:容器适配器 Stack 与 Queue 的使用及模拟实现(一)
【C++】C++ STL探索:容器适配器 Stack 与 Queue 的使用及模拟实现