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>

 

目录
相关文章
|
4月前
|
API C++ Windows
Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法
本文介绍Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法,提供官方下载链接与系统修复工具使用指南。
994 2
|
4月前
|
缓存 算法 程序员
C++STL底层原理:探秘标准模板库的内部机制
🌟蒋星熠Jaxonic带你深入STL底层:从容器内存管理到红黑树、哈希表,剖析迭代器、算法与分配器核心机制,揭秘C++标准库的高效设计哲学与性能优化实践。
C++STL底层原理:探秘标准模板库的内部机制
|
4月前
|
Ubuntu API C++
C++标准库、Windows API及Ubuntu API的综合应用
总之,C++标准库、Windows API和Ubuntu API的综合应用是一项挑战性较大的任务,需要开发者具备跨平台编程的深入知识和丰富经验。通过合理的架构设计和有效的工具选择,可以在不同的操作系统平台上高效地开发和部署应用程序。
213 11
|
4月前
|
IDE 编译器 开发工具
msvcp100.dll,msvcp120.dll,msvcp140.dll,Microsoft Visual C++ 2015 Redistributable,Visual C++ 运行库安装
MSVC是Windows下C/C++开发核心工具,集成编译器、链接器与调试器,配合Visual Studio使用。其运行时库(如msvcp140.dll)为程序提供基础函数支持,常因缺失导致软件无法运行。通过安装对应版本的Microsoft Visual C++ Redistributable可解决此类问题,广泛应用于桌面软件、游戏及系统级开发。
544 2
|
5月前
|
并行计算 C++ Windows
|
12月前
|
存储 缓存 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 的奥秘,从入门到高效编程
|
JSON C++ 数据格式
C++20 高性能基础库--兰亭集库助力开发者构建高性能应用
这次分享的主题是《高性能基础库--兰亭集库助力开发者构建高性能应用》的实践经验。主要分为三个部分: 1. 业务背景 2. 雅兰亭库架构 3. 业务优化
436 9
|
XML 网络协议 API
超级好用的C++实用库之服务包装类
通过本文对Boost.Asio、gRPC和Poco三个超级好用的C++服务包装类库的详细介绍,开发者可以根据自己的需求选择合适的库来简化开发工作,提高代码的效率和可维护性。每个库都有其独特的优势和适用场景,合理使用这些库可以极大地提升C++开发的生产力。
329 11
|
存储 设计模式 C++
【C++】优先级队列(容器适配器)
本文介绍了C++ STL中的线性容器及其适配器,包括栈、队列和优先队列的设计与实现。详细解析了`deque`的特点和存储结构,以及如何利用`deque`实现栈、队列和优先队列。通过自定义命名空间和类模板,展示了如何模拟实现这些容器适配器,重点讲解了优先队列的内部机制,如堆的构建与维护方法。
210 0