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 天前
# 用 5 个问题学懂 C++ 虚函数(入门级)
c++
不想写代码的星星1 天前
虚函数表:C++ 多态背后的那个男人
c++
端平入洛3 天前
delete又未完全delete
c++
端平入洛4 天前
auto有时不auto
c++
哇哈哈20215 天前
信号量和信号
linux·c++
多恩Stone5 天前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc
蜡笔小马5 天前
21.Boost.Geometry disjoint、distance、envelope、equals、expand和for_each算法接口详解
c++·算法·boost
超级大福宝5 天前
N皇后问题:经典回溯算法的一些分析
数据结构·c++·算法·leetcode
weiabc5 天前
printf(“%lf“, ys) 和 cout << ys 输出的浮点数格式存在细微差异
数据结构·c++·算法
问好眼5 天前
《算法竞赛进阶指南》0x01 位运算-3.64位整数乘法
c++·算法·位运算·信息学奥赛