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

相关推荐
田里的水稻1 小时前
C++_队列编码实例,从末端添加对象,同时把头部的对象剔除掉,中的队列长度为设置长度NUM_OBJ
java·c++·算法
Jayden_Ruan2 小时前
C++逆向输出一个字符串(三)
开发语言·c++·算法
liulun3 小时前
Skia如何渲染 Lottie 动画
c++·动画
点云SLAM3 小时前
C++ 常见面试题汇总
java·开发语言·c++·算法·面试·内存管理
UnnamedOrange5 小时前
ROS2 配置 linter 的代码格式化工具为 clang-format
c++·cmake
Dobby_055 小时前
【面试题】C++系列(一)
c++·面经
一拳一个呆瓜5 小时前
【MFC】对话框节点属性:Language(语言)
c++·mfc
点云侠7 小时前
解决Visual Studio 2022编译工程速度慢的问题
开发语言·c++·ide·算法·计算机视觉·visual studio
ajassi20008 小时前
开源 C++ QT Widget 开发(十三)IPC通讯--本地套接字 (Local Socket)
linux·c++·qt·开源
Q741_1478 小时前
C++ 前缀和 高频笔试考点 实用技巧 牛客 DP34 [模板] 前缀和 题解 每日一题
开发语言·c++·算法·前缀和·牛客网