随笔分类 - C++
摘要:is_sorted判断数组是否有序
阅读全文
摘要:vector.back()获取vector最后一个元素。multiset自动排序。tuple元组,tuple是一个固定大小的不同类型值的集合,是泛化的std::pair。std::get<ith>(tuple_obj)可以获取tuple_obj的第ith个值,ith必须在编译期已经给定。
阅读全文
摘要:通过一次深度优先遍历以及一个unordered_map可以记录每个节点的父节点 c++17,结构化绑定,结构化绑定允许通过对象、结构体的成员来初始化多个变量,结构化绑定声明使用auto来声明多个变量,所有变量都必须用中括号[ ]括起来。在所有情况下,元素或数据成员的数量都必须符合结构化绑定声明中的名
阅读全文
摘要:隐式转换被设计得尽可能避免损失精度 static_cast 任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast;const_cast只能改变运算对象的底层const,不能改变表达式的类型;reinterpret_cast通常为运算对象的位模式提供较低层次上的从新解
阅读全文
摘要:对数组执行sizeof运算得到整个数组所占空间的大小(不会把数组转换成指针处理)对string或vector对象执行sizeof运算只返回该类型固定部分的大小,不会计算对象中的元素占用了多少空间
阅读全文
摘要:c++11新标准允许使用花括号括起来的初始值列表作为赋值语句右侧的运算对象vector<int> v1;v1={0,1,2,3,4,5,6};赋值运算符满足右结合律,这一点与其他二元运算符不太一样。赋值运算符返回其左侧运算对象。
阅读全文
摘要:表达式求值之前,小整数类型的运算对象被提升成较大的整数类型bool值不应该参与运算bool b=true;bool b2=-b;//b2是true,true->1->-1->(-1!=0)->truem和n是整数,则m/n向0取整(舍弃小数部分),m%n与m符号相同(!!!),(m/n)*n+m%n
阅读全文
摘要:decltype作用于左值表达式时得到一个引用类型。int *p;decltype(*p);//结果为int &decltype(&p);//结果为int **
阅读全文
摘要:多维数组的外层范围for语句的循环控制变量必须用引用,否则会被退化成指针 using int_array = int[4];//类型别名的声明typedef int int_array[4];//等价的typedef声明using myRef = int&;//引用类型的别名typedef int&
阅读全文
摘要:string可用字符串字面值或以'\0'结尾的字符数组进行初始化
阅读全文
摘要:auto推断数组的结果为指针,而decltype()可以返回大小正确的数组int ia[]={1,2,3,4};decltype(ia) ia2={1,2,3};//ia2={1,2,3,0};begin()和end()函数(不是容器的成员函数,定义在iterator有头文件中)可以返回数组首元素和
阅读全文
摘要:isdigit() 判断char是否为数字islower()判断char是否为小写字母to_string 转为string对于括号序列相关的题目,通用的解法是使用递归或栈。
阅读全文
摘要:内置类型的变量未被显式初始化时,它的值由其定义的位置决定。定义于任何函数体之外的变量被初始化为0,定义在函数体内部的内置类型将不被初始化,其值是未定义的,如果试图拷贝或访问将引发错误。
阅读全文
摘要:利用字符串字面值初始化字符数组时,末尾会加'\0'不允许将数组的内容拷贝给其他数组作为其初始值,也不能用数组为其他数组赋值。int a[]={1,2,3};int a2[]=a;//错误a2=a;//错误 复杂数组的声明int *ptrs[10];//ptrs含是有10个整形指针的数组,类型修饰符从
阅读全文
摘要:__builtin_popcount(),统计二进制中1的个数。
阅读全文
摘要:reverse(str.begin(), str.end());reverse函数 反转容器内的内容
阅读全文
摘要:min_element(), max_element(),minmax_element()求容器最小/最大值的迭代器min_element(v.begin(),v.end(),comp);传入比较函数comp时,可以理解为为先按照comp排序,min_element返回第一个值,max_elemen
阅读全文
摘要:c++ 17标准支持 for (auto& [key, value] : map)vector擦除部分 vec.erase(vec.begin() + k, rec.end());vector用另一vector的一部分初始化 vector<T> v2(v1.begin()+n1,v1.end()-n
阅读全文
摘要:标准容器的迭代器都支持++、--、==和!=改变vector对象容量的操作会使vector的迭代器失效vector和string的迭代器支持加减运算iter+n;迭代器指示的位置比原迭代器相比向前移动n个元素iter-n;迭代器指示的位置比原迭代器相比向后移动n个元素iter+=n;迭代器加法复合运
阅读全文
摘要:列表初始化会尽可能地把花括号内的值当成元素初始值来处理,只有无法执行列表初始化时才会考虑其他初始化方式;vector<int> v1{10};//一个元素;vector<int> v2{10,2};//两个元素vector<string> v5{"hi"};//一个元素"hi",列表初始化vecto
阅读全文