随笔分类 - c++11
摘要:std::bind 是 C++ 标准库中的一个工具,用于将函数对象与部分参数绑定在一起,生成一个新的可调用对象。这使得函数的参数可以被部分或全部提前指定,从而得到一个参数更少甚至无参数的函数对象。在某些情况下,它可以用来延迟执行函数、简化函数调用,或在需要无参函数对象的场景中使用(如线程池、回调等)
阅读全文
摘要:线程池是一种用于管理和复用线程的技术,主要目的是提高系统性能和资源利用率。 它通过预先创建一定数量的线程,并将它们保存在线程池中,当需要执行任务时,从线程池中获取一个空闲的线程来执行任务,而不是每次都创建新的线程¹²。 线程池的工作原理 线程池初始化:在应用程序启动时,线程池会创建一定数量的线程,这
阅读全文
摘要:std::make_shared 是 C++11 引入的一个标准库函数,用于创建一个 std::shared_ptr,并在堆上分配所需的对象。 它的功能是将对象的创建和 shared_ptr 的初始化合并在一起,提高了效率和安全性。 使用方法: auto ptr = std::make_shared
阅读全文
摘要:在C++中的可变模板参数使用省略号 ... 来表示一个参数包(Parameter Pack),其具体位置决定了这个包是模板参数包还是函数参数包,以及如何进行参数展开。 1. 模板参数包:c... Args 省略号放在类型名称的右边,用来表示模板参数包,即可以接受任意数量的模板类型参数。 templa
阅读全文
摘要:标准库中的 std::queue 不是线程安全的。 这意味着在多线程环境中,多个线程同时对 std::queue 进行读写操作时,可能会导致数据竞争(data race)和未定义行为。下面是详细的解释: 原因 数据竞争: 当多个线程同时对 std::queue 进行操作(如 push、pop 等),
阅读全文
摘要:std::unique_lock 是 C++11 标准库中的一个类,提供了一种灵活的方式来管理互斥量(mutex)。 它比 std::lock_guard 更加灵活,允许在不同的作用域和不同的锁定策略之间进行选择。以下是对 unique_lock 的详细解释,包括其用途、使用方法和优点。 1. 定义
阅读全文
摘要:仿函数(Functor) 仿函数是通过重载()运算符的类或结构体的对象。这样一个对象可以像普通函数一样被调用。 仿函数通常用于需要在对象内部保留状态或多次调用时有特定行为的情况。 特点: 仿函数是一个类对象。 通过重载 () 运算符使得类对象像函数一样可以被调用。 可以在类中保留状态或成员变量,提供
阅读全文
摘要:左值引用指向左值 右值引用指向右值 int a = 5; int &ref_a = a; // 左值引用指向左值,编译通过 int &ref_a = 5; // 左值引用指向了右值,会编译失败 int &&ref_a_right = 5; // ok int a = 5; int &&ref_a_l
阅读全文
摘要:C++ 中的 Lambda 函数 在C++11及以后版本中,Lambda函数(或称为匿名函数)是一种内联函数,可以在函数内部或任何其他地方定义,甚至可以立即传递给其他函数。 Lambda函数的语法更加灵活,允许捕获变量和处理复杂的行为,非常适合在需要简单函数的场景中使用。 语法 [capture](
阅读全文
摘要:在 C++ 中,std::string::find() 是一个用于在字符串中查找子字符串或字符的成员函数。查找成功时返回匹配的索引位置,查找失败时返回 std::string::npos,表示未找到。 std::string::find() 函数原型 std::size_t find(const s
阅读全文
摘要:在 C++ 标准库中,std::vector 和 std::map 都支持以下比较运算符: ==(相等运算符) !=(不等运算符) <(小于运算符) <=(小于等于运算符) >(大于运算符) >=(大于等于运算符) 1. std::vector 的比较 对于 std::vector,这些运算符通过词
阅读全文
摘要:std::unordered_map 的键要求: std::unordered_map 是基于哈希表的数据结构。 它要求键类型必须支持哈希计算,也就是必须有对应的 std::hash 函数。 另外,键类型还必须支持相等比较(通过 operator==)。 如果键类型没有定义哈希函数(例如你自定义的
阅读全文
摘要:C++中支持 std::string str(v.begin(), v.end()); 这样的写法, 是因为C++的STL(标准模板库)容器和字符串类都支持迭代器范围构造函数。 这种写法主要涉及以下几个概念: 1. 迭代器范围构造函数 C++ 标准库中的许多容器(如 std::vector、std:
阅读全文
摘要:std::map(有序映射) std::unordered_map(无序映射) std::multimap(有序多重映射) std::unordered_multimap(无序多重映射) 它们的使用方式和特点略有不同,下面分别介绍这些数据结构及其基本用法。 1. std::map(有序映射) std
阅读全文
摘要:push_back 与 emplace_back 的区别 push_back: 功能:将一个对象(或其副本)添加到 vector 的末尾。 参数:接受一个对象(或其副本)的引用。 过程: 如果传入的是一个临时对象或一个已有对象,push_back 会创建该对象的副本(或者通过移动构造函数将其移动到
阅读全文