STL温故知新

STL核心架构

STL六大组件

  1. 容器(Containers) :管理数据集合的模板类
  2. 算法(Algorithms) :操作数据的函数模板
  3. 迭代器(Iterators) :容器与算法之间的桥梁
  4. 仿函数(Functors) :行为类似函数的对象
  5. 适配器(Adapters) :修改组件接口的包装器
  6. 分配器(Allocators) :内存管理的模板类

STL设计哲学

  • 泛型编程思想
  • 效率优先
  • 正交性设计(组件独立且可组合)
  • 可扩展性

STL温故知新

1、string_view:

是 C++17 中引入的一个非常有用的工具,主要用于高效地处理字符串数据,尤其在不需要复制字符串内容时。

避免不必要的内存分配与复制

c 复制代码
void print_string_view(std::string_view sv) {
    std::cout << sv << std::endl;
}

传递 std::string_view 比传递 std::string 更高效,因为它不涉及字符串内容的复制。

支持常量与非常量字符串

std::string_view 可以指向常量字符串(const char*)和非常量字符串(std::string)。不过,std::string_view 本身是不可修改的,因此它不能直接修改视图所指向的字符串内容。

ini 复制代码
const char* cstr = "Hello";
std::string_view view(cstr);
// view[0] = 'h'; // 错误:不能修改 const char*

注意事项

生命周期管理std::string_view 并不拥有其指向的数据,不要让 std::string_view 指向一个局部变量或已经释放的内存。

c 复制代码
std::string_view view;
{
    std::string str = "Temporary string";
    view = std::string_view(str);  // 这里会有悬挂引用的问题
}
// str 的生命周期结束,view 成为悬挂引用

2、使用vector需要注意哪些问题?

迭代器失效:vector 在扩容或删除元素时,会导致迭代器、指针和引用失效。

频繁扩容的性能开销:每次扩容都会重新分配内存并拷贝元素,可以提前使用 reserve 优化。

插入和删除性能:vector 在中间或头部插入和删除元素的性能较差,因为需要移动后续元素。

空间未释放:使用 clear 只清空元素,容量不变,可使用 shrink_to_fit 回收内存。

线程安全:vector 不是线程安全的,需在多线程场景下显式同步。

相关推荐
骁的小小站3 小时前
Verilator 和 GTKwave联合仿真
开发语言·c++·经验分享·笔记·学习·fpga开发
旭意6 小时前
C++蓝桥杯之结构体10.15
开发语言·c++
深思慎考7 小时前
调用百度云语音识别服务——实现c++接口识别语音
c++·语音识别·百度云
K 旺仔小馒头9 小时前
优选算法:01 双指针巧解移动零问题
c++·算法·刷题
AlexMercer101210 小时前
Ubuntu从零开始配置Git
c++·git·ubuntu·gitee
无敌最俊朗@11 小时前
C++ STL Deque 高频面试题与答案
开发语言·c++
和编程干到底11 小时前
C++基础
开发语言·c++
John.Lewis12 小时前
C++初阶(14)list
开发语言·c++·笔记
hsjkdhs13 小时前
C++文件操作
开发语言·c++
沐怡旸14 小时前
【穿越Effective C++】条款4:确定对象使用前已先被初始化——C++资源管理的基石
c++·面试