随笔分类 - C++
摘要:一、简介 1.1 介绍 list是一种序列式容器。list容器完成的功能实际上和数据结构中的双向链表是极其相似的,list中的数据元素是通过链表指针串连成逻辑意义上的线性表,也就是list也具有链表的主要优点,即:在链表的任一位置进行元素的插入、删除操作都是快速的。list的实现大概是这样的:lis
阅读全文
摘要:一、string简介 1.1 介绍 首先在c++中string是一个类,其头文件为 < string > string在标准空间std。 具体资料在官方链接。 主要参考官方文档和具体实例。 strings are objects that represent of characters. 1.2 s
阅读全文
摘要:一、智能指针 1.1为何使用智能指针 首先我们先谈为何需要智能指针,C++11之前操作堆内存空间都是使用new,delete来维护,但是很容易造成new出来的内存忘记delete,开发人员需要大量时间维护修复。而new出来返回的指针也叫裸指针。 1)裸指针:直接用new返回的指针。这种指针强大,灵活
阅读全文
摘要:一、介绍 lock_guard和unique_lock都是RAII机制下的锁,即依靠对象的创建和销毁也就是其生命周期来自动实现一些逻辑,而这两个对象就是在创建时自动加锁,在销毁时自动解锁。所以如果仅仅是依靠对象生命周期实现加解锁的话,两者是相同的,都可以用,因跟生命周期有关,所以有时会用花括号指定其
阅读全文
摘要:一、简介 move语义使得你可以用廉价的move赋值替代昂贵的copy赋值,完美转发使得你可以将传来的任意参数转发给其他函数,而右值引用使得move语义和完美转发成为可能。然而,慢慢地你发现这不那么简单,你发现std::move并没有move任何东西,完美转发也并不完美,而T&&也不一定就是右值引用
阅读全文
摘要:C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。 一、面向过程设计中的static 1、静态全局变量 在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量
阅读全文
摘要:1、strtok函数 函数原型:char * strtok (char *str, const char * delimiters); 参数:str,待分割的字符串(c-string);delimiters,分割符字符串。该函数用来将字符串分割成一个个片段。参数str指向欲分割的字符串,参数deli
阅读全文
摘要:关于在C++中字符串的输入整理笔记 1. cin cin是C++中最常用的输入语句,当遇到空格或者回车键即停止 如: 1 #include <iostream> 2 3 #include <string> 4 5 using namespace std; 6 7 int main() 8 9 { 1
阅读全文
摘要:一、bit_xor 1、头文件 #include <functional> 2、模板 template <class T> struct bit_xor; template <class T = void> struct bit_xor; 3、返回两个参数按位XOR的结果(公共成员函数) 4、使用
阅读全文
摘要:一. auto简介 编程时候常常需要把表达式的值付给变量,需要在声明变量的时候清楚的知道变量是什么类型。然而做到这一点并非那么容易(特别是模板中),有时候根本做不到。为了解决这个问题,C++11新标准就引入了auto类型说明符,用它就能让编译器替我们去分析表达式所属的类型。和原来那些只对应某种特定的
阅读全文
摘要:1,元组简介 tuple是一个固定大小的不同类型值的集合,是泛化的std::pair。我们也可以把他当做一个通用的结构体来用,不需要创建结构体又获取结构体的特征,在某些情况下可以取代结构体使程序更简洁,直观。std::tuple理论上可以有无数个任意类型的成员变量,而std::pair只能是2个成员
阅读全文
摘要:一. 位操作基础 位运算符分为逻辑运算符(~、|、&、^)和移位运算符(<<、>>、>>>)。位运算操作的是二进制的数。 逻辑运算符1、^(亦或运算) ,针对二进制,相同的为0,不同的为1。 2、&(与运算) 针对二进制,只要有一个为0,就为0 3、| 两个位只要有一个为1,那么结果就是1,否则就为
阅读全文
摘要:除了普通迭代器,C++标准模板库还定义了几种特殊的迭代器,分别是插入迭代器、流迭代器、反向迭代器和移动迭代器,定义在<iterator>头文件中,下面主要介绍三种插入迭代器(back_inserter,inserter,front_inserter)的区别。首先,什么是插入迭代器?插入迭代器是指被绑
阅读全文
摘要:一、背景引入 如果我有一个函数f和一个对象x,我希望在x上调用f,而且我在x的成员函数之外。C++给我三种不同的语法来实现这个调用: // 语法#1:当f是一个非成员函数 f(x); // 语法#2:当f是一个成员函数 ,而且x是一个对象或一个对象的引用 x.f(); // 语法#3:当f是一个成员
阅读全文
摘要:简单来将,仿函数(functor)就是一个重载了"()"运算符的struct或class,利用对象支持operator()的特性,来达到模拟函数调用效果的技术。 我们平时对一个集合类遍历的时候,例如vector,是这样做的: 1 for(vector<int>::const_iterator ite
阅读全文
摘要:not1是构造一个与谓词结果相反的一元函数对象,not2是构造一个与谓词结果相反的二元函数对象。 not1: 1 // not1 example 2 #include <iostream> // std::cout 3 #include <functional> // std::not1 4 #in
阅读全文
摘要:compose1和compose2均是用于参数合成 比如: f(x)=3*x,g(y)=y+2,那么compose1(f(x),g(y))=(y+2)*3 g1(x)=3*x,g2(x)=2*x,h(x)=a+b,那么compose2(h(x),g1(x),g2(x))=3*x+2*x 大体效果就是
阅读全文
摘要:c++开发中我们会经常用到插入操作对stl的各种容器进行操作,比如vector,map,set等。在引入右值引用,转移构造函数,转移复制运算符之前,通常使用push_back()向容器中加入一个右值元素(临时对象)时,首先会调用构造函数构造这个临时对象,然后需要调用拷贝构造函数将这个临时对象放入容器
阅读全文
摘要:目录 起因 typename的常见用法 typename的来源 一些关键概念 限定名和非限定名 依赖名和非依赖名 类作用域 引入typename的真实原因参考 一个例子 问题浮现 千呼万唤始出来 不同编译器对错误情况的处理 使用typename的规则 其它例子 再看常见用法 写在结尾 起因 近日,看
阅读全文
摘要:1. decltype的意义 有时我们希望从表达式的类型推断出要定义的变量类型,但是不想用该表达式的值初始化变量(初始化可以用auto)。为了满足这一需求,C++11新标准引入了decltype类型说明符,它的作用是选择并返回操作数的数据类型,在此过程中,编译器分析表达式并得到它的类型,却不实际计算
阅读全文
浙公网安备 33010602011771号