std
C++面试八股文:用过std::set/std::map吗?
某日二师兄参加XXX科技公司的C++工程师开发岗位第27面: > 面试官:用过`std::set/std::map`吗? > > 二师兄:用过。 > > 面试官:能介绍一下二者吗? > > 二师兄:`std::set`是一个有序的集合,其中的元素是唯一的,即每个元素只能出现一次。一般用于去重和自动排 ......
std::future 如何保存多个对象进行同步等待
std::future 是一个 C++11 引入的标准库类,可用于异步获取计算结果。通常情况下,std::future 可以通过 get() 函数来等待异步操作完成,并获取其结果。 如果需要等待多个异步操作完成并获取它们各自的结果,可以使用 std::future 的姊妹类 std::shared_ ......
C++面试八股文:std::deque用过吗?
某日二师兄参加XXX科技公司的C++工程师开发岗位第26面: > 面试官:`deque`用过吗? > > 二师兄:说实话,很少用,基本没用过。 > > 面试官:为什么? > > 二师兄:因为使用它的场景很少,大部分需要性能、且需要自动扩容的时候使用`vector`,需要随机插入和删除的时候可以使用` ......
c++ std::execution::par,std::execution::par_unseq
#include <algorithm> #include <chrono> #include <cstdint> #include <execution> #include <iostream> #include <random> #include <vector> std::random_dev ......
C++面试八股文:std::array如何实现编译器排序?
某日二师兄参加XXX科技公司的C++工程师开发岗位第25面: > 面试官:`array`熟悉吗? > > 二师兄:你说的是原生数组还是`std::array`? > > 面试官:你觉得两者有什么区别? > > 二师兄:区别不是很大,原生数组(非动态数组)和std::array都在栈上开辟空间,初始化 ......
C++面试八股文:std::string是如何实现的?
# C++面试八股文:std::string是如何实现的? 某日二师兄参加XXX科技公司的C++工程师开发岗位第18面: > 面试官:`std::string`用过吧? > 二师兄:当然用过(废话,C++程序员就没有没用过`std::string`的)。 > 面试官:`std::string("he ......
C++面试八股文:std::vector和std::list,如何选择?
某日二师兄参加XXX科技公司的C++工程师开发岗位第24面: > 面试官:`list`用过吗? > > 二师兄:嗯,用过。 > > 面试官:请讲一下`list`的实现原理。 > > 二师兄:`std::list`被称为双向链表,和C中手写双向链表本质上没有大的区别。`list`对象中有两个指针,一个 ......
C++面试八股文:std::vector了解吗?
某日二师兄参加XXX科技公司的C++工程师开发岗位第23面: > 面试官:`vector`了解吗? > > 二师兄:嗯,用过。 > > 面试官:那你知道`vector`底层是如何实现的吗? > > 二师兄:`vector`底层使用动态数组来存储元素对象,同时使用`size`和`capacity`记录 ......
C++17之std::any
一般来说,c++是一种具有类型绑定和类型安全性的语言。值对象声明为具有特定类型,该类型定义哪些操作是可能的以及它们的行为方式。值对象不能改变它们的类型。 std: any是一种值类型,它能够更改其类型,同时仍然具有类型安全性。也就是说,对象可以保存任意类型的值,但是它们知道当前保存的值是哪种类型。在 ......
C++ 计时方法 std::chrono
计时的作用:测试某一段代码的运行时间,时间越短,则性能相对越高。 C++11 标准的”最佳计时方法“的代码: 1 #include <chrono> 2 using namespace std; 3 using namespace chrono; 4 5 auto start = system_cl ......
C++ std::move 的一些问题
看 SO 上有一个比较奇怪的问题, When does an rvalue reference result in a move vs copy constructor and why? 问题代码: ClassX c = std::move(object_c); // Invokes move co ......
C++ std::chrono的时钟Clock
std::chrono是C++11引入的日期时间处理库,其中包含3种时钟:system_clock,steady_clock,high_resolution_clock。近来需要使用高精度时间,很自然想到使用high_resolution_clock,然而使用后发现并非预期的得到自1970/1/1零 ......
std::thread 六:多线程&单例类
为了避免单例类在多线程中重复的创建,下面提供了两种解决方法: 1.互斥锁+双重检查 2.std::call_once() 方法一:互斥锁+双重检查 #include <iostream> #include <thread> #include <mutex> #include <list> using ......
std::thread 四:异步(async)
*:如果 std::async 中传递参数 std::lunnch::deferred ,就需要等待调用 get() 或者 wait() 才会执行,并且代码非子线程运行,而是在主线程中执行 #include <iostream> #include <thread> #include <mutex> ......
std::thread 五:打包任务(packaged_task)
#include <iostream> #include <thread> #include <mutex> #include <list> #include <future> using namespace std; int myThread(int num) { cout << "myThrea ......
std::thread 三:条件变量(condition_variable())
condition_variable 、 wait 、 notify_one 、 notify_all *:notify_one:通知(唤醒)一个线程 *:notify_all:通知(唤醒)多个线程 #include <iostream> #include <thread> #include <mu ......
std::thread 二:互斥量(带超时的互斥量 timed_mutex())
timed_mutex 、 try_lock_for 、 try_lock_until #include <iostream> #include <thread> #include <mutex> #include <list> using namespace std; class A { publ ......
std::thread 二:互斥量(多个互斥量的解决方法)
// *:这里的lock是函数模板,最少传两个互斥量 // 第一种,使用 lock 和 unlock std::mutex m_mutex1; std::mutex m_mutex2; std::lock(m_mutex1, m_mutex2); m_mutex1.unlock(); m_mutex ......
std::thread 二:互斥量(lock() & unlock())
mutex 互斥量的作用是保护共享数据 *:有 lock() 就一定要有 unlock() #include <iostream> #include <thread> #include <mutex> #include <list> using namespace std; class A { pu ......
std::thread 二:互斥量(lock_guard())
*:使用 lock_guard 后,就不可以使用 lock() 和 unlock() *:lock_guard 和智能指针一样,会自动解锁 #include <iostream> #include <thread> #include <mutex> #include <list> using nam ......
std::thread 一:创建线程的三种方式
前言: #include <thread> thread.join() // 阻塞 thread.detach() // 非阻塞 thread.joinable() // bool,判断线程是否支持join或者detach 正文: 创建线程有三种方式,分别是:使用函数来创建线程、使用自定义的类来创建 ......
std::string 拼接字符串
#include <iostream> #include <string> #include <sstream> using namespace std; int main() { string a = "123"; stringstream b; b << 123 << "456" << 789 ......
C++面试八股文:std::string是如何实现的?
某日二师兄参加XXX科技公司的C++工程师开发岗位第18面: > 面试官:`std::string`用过吧? > > 二师兄:当然用过(废话,C++程序员就没有没用过`std::string`的)。 > > 面试官:`std::string("hello")+"world"`、`"hello"+st ......
c++多线程 std::async std::future
c++标准库中对线程操作有完善的封装,其中最常用到的如std::thread, std::async。 EffectiveModernCpp中指出,应尽量使用std::async即基于任务的编程而非基于线程的编程。std::thread在前面的文章有提到过,此处仅对std::async作以记录。 正 ......
Qt error: C7525: 内联变量至少需要 “/std:c++17“
碰到这种错误,只需要在Qt中配置C++17即可解决 打开该项目中的xxx.pro文件,然后如下图中红色方框中配置:CONFIG += c++17 ......
std::package_task bind.lambda,thread,future
#include <atomic> #include <chrono> #include <cmath> #include <condition_variable> #include <cstddef> #include <forward_list> #include <fstream> #incl ......
C++ Windows.h max宏与std::max冲突问题解决
C语言引入的宏支持了一定程度的元编程,但它仅仅是简单的字符串替换,这种“六亲不认”的操作很容易导致一些编译错误。 这篇文章介绍了一种场景:项目同时引入了老的C头文件,里面用宏定义了一些宏函数;还引入了C++的头文件,里面用其他方式定义了一些同名函数。具体到问题本身,这个老的头文件是Windows.h ......
std::atomic store load std::memory_order_seq_cst
#include <atomic> #include <chrono> #include <ctime> #include <fstream> #include <future> #include <iomanip> #include <iostream> #include <map> #inclu ......
关于std::vector<bool>的一些细节
std::vector<T>是我们经常用到的STL容器,但是std::vector<bool>比较特殊,其特殊之处在于operato[]返回的元素类型是std::vector<bool>::reference(一个嵌套于std::vector<bool>中的类)。 std::vector<bool> ......