C++标准库容器的基本用法

简介: C++标准库容器的基本用法

一、引言

在C++编程中,标准库容器(STL Containers)是一组用于存储数据的模板类。这些容器类提供了高效且灵活的方式来管理和操作数据,包括序列容器、关联容器和容器适配器。本文将介绍C++标准库中最常用的几种容器的基本用法,包括vectorlistsetmap以及stackqueue等容器适配器。

二、序列容器

vector(向量)

vector是一个动态数组,它可以自动管理内存和大小。vector提供了许多成员函数来访问和修改其元素,如push_back()pop_back()size()等。

示例:

cpp

 

#include <iostream> 

 

#include <vector> 

 

 

 

int main() {

 

std::vector<int> vec;

 

vec.push_back(1);

 

vec.push_back(2);

 

vec.push_back(3);

 

 

 

for (int i = 0; i < vec.size(); ++i) {

 

std::cout << vec[i] << ' ';

 

}

 

// 输出:1 2 3

 

 

 

return 0;

 

}

list(双向链表)

list是一个双向链表,允许在链表的任何位置插入和删除元素。list提供了许多成员函数来操作其元素,如push_front()push_back()remove()等。

示例:

cpp

 

#include <iostream> 

 

#include <list> 

 

 

 

int main() {

 

std::list<int> lst;

 

lst.push_front(1);

 

lst.push_back(2);

 

lst.push_back(3);

 

 

 

for (auto it = lst.begin(); it != lst.end(); ++it) {

 

std::cout << *it << ' ';

 

}

 

// 输出:1 2 3

 

 

 

return 0;

 

}

三、关联容器

set(集合)

set是一个包含唯一元素的集合,它根据元素的键值自动排序。set中的元素不能重复,且插入和删除操作的时间复杂度通常是对数级别的。

示例:

cpp

 

#include <iostream> 

 

#include <set> 

 

 

 

int main() {

 

std::set<int> s;

 

s.insert(3);

 

s.insert(1);

 

s.insert(2);

 

 

 

for (auto it = s.begin(); it != s.end(); ++it) {

 

std::cout << *it << ' ';

 

}

 

// 输出:1 2 3

 

 

 

return 0;

 

}

map(映射)

map是一个关联数组,它允许根据键(key)来存储和检索值(value)。map中的键是唯一的,且键和值之间的关联是持久的。

示例:

cpp

 

#include <iostream> 

 

#include <map> 

 

 

 

int main() {

 

std::map<std::string, int> m;

 

m["one"] = 1;

 

m["two"] = 2;

 

m["three"] = 3;

 

 

 

for (const auto& pair : m) {

 

std::cout << pair.first << ": " << pair.second << std::endl;

 

}

 

// 输出:one: 1

 

// two: 2

 

// three: 3

 

 

 

return 0;

 

}

四、容器适配器

stack(栈)

stack是一个后进先出(LIFO)的数据结构,它提供了基本的栈操作,如push()pop()top()empty()stack通常用于需要按特定顺序访问和存储数据的场景。

示例:

cpp

 

#include <iostream> 

 

#include <stack> 

 

 

 

int main() {

 

std::stack<int> stk;

 

stk.push(1);

 

stk.push(2);

 

stk.push(3);

 

 

 

while (!stk.empty()) {

 

std::cout << stk.top() << ' '; // 输出:3 2 1

 

stk.pop();

 

}

 

 

 

return 0;

 

}

**queue(队列

目录
相关文章
|
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