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 不是线程安全的,需在多线程场景下显式同步。

相关推荐
喜欢吃燃面7 分钟前
C++:list(1)list的使用
开发语言·c++·学习
神仙别闹1 小时前
基于QT(C++)实现(图形界面)选课管理系统
java·c++·qt
NicolasCage2 小时前
C语言指针Pointers
c++·后端
「QT(C++)开发工程师」2 小时前
Qt C++动态库SDK在Visual Studio 2022使用(C++/C#版本)
c++·qt·c#·visual studio
weixin_537590453 小时前
【任务6.13】计算肇事汽车号码
c++·算法·汽车
两颗泡腾片3 小时前
黑马程序员C++核心编程笔记--类和对象--运算符重载
c++·笔记
用户686916134903 小时前
1999年NOIP普及组旅行家的预算(洛谷P1016):贪心算法实战指南
c++
程序员编程指南4 小时前
Qt 与 WebService 交互开发
c语言·开发语言·c++·qt·交互
溟洵4 小时前
Qt 窗口 工具栏QToolBar、状态栏StatusBar
开发语言·前端·数据库·c++·后端·qt
铭哥的编程日记4 小时前
《C++ list 完全指南:list的模拟实现》
c++