首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

两万字总结《C++ Primer》要点

如果用圆括号,那么提供的值是用来构造vector对象的。 如果用花括号,则是使用列表初始化该vector对象。...(2)向vector对象添加元素 先定义一个空的vector对象,在运行的时候使用push_back向其中添加具体指。...重载运算符包含返回类型、参数列表和函数体。 ::: tip 当一个重载的运算符是成员函数时,this绑定到左侧运算对象。成员运算符函数的显式参数数量比运算对象的数量少一个。...类模板的定义以关键词template开始,后面跟尖括号对,其内为一个用逗号分隔的一个或多个模板参数的列表,随后是类的定义。 函数模板:模板定义,可从它实例化出特定函数。...函数模板的定义以关键词template开始,后跟尖括号,其内以一个用逗号分隔的一个或多个模板参数的列表,随后是函数的定义。

2.1K30

两万字总结《C++ Primer》要点

如果用圆括号,那么提供的值是用来构造vector对象的。 如果用花括号,则是使用列表初始化该vector对象。...(2)向vector对象添加元素 先定义一个空的vector对象,在运行的时候使用push_back向其中添加具体指。...重载运算符包含返回类型、参数列表和函数体。 ::: tip 当一个重载的运算符是成员函数时,this绑定到左侧运算对象。成员运算符函数的显式参数数量比运算对象的数量少一个。...类模板的定义以关键词template开始,后面跟尖括号对,其内为一个用逗号分隔的一个或多个模板参数的列表,随后是类的定义。 函数模板:模板定义,可从它实例化出特定函数。...函数模板的定义以关键词template开始,后跟尖括号,其内以一个用逗号分隔的一个或多个模板参数的列表,随后是函数的定义。

1.8K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    《C++Primer》第十四章 重载运算与类型转换

    第十四章 重载运算与类型转换 基本概念 当一个重载符是成员函数时,this绑定到左侧运算对象,成员运算符的(显式)参数数量比运算对象的数量少一个 运算符函数必须要么是类的成员,要么最少含有一个类类型的参数...:这四个运算符是不能被重载的 使用重载的运算符本质上是一次函数调用,关于运算对象求值顺序和短路求值属性无法保留下来,因此不建议重载逻辑与/或运算符和逗号运算符 C++定义了逗号运算符和取地址运算符用于类类型对象时的特殊含义...,所以我们一般也不重载它们 一般情况下不重载逗号、取地址、逻辑与和逻辑或运算符 我们定义重载的运算符时,必须首先决定它是声明为类的成员函数还是声明为一个普通的非成员函数: 赋值=、下标[]、调用(...比如: vector v; v = {"a", "an", "the"}; // 把这个运算符添加到StrVec中 StrVec &StrVec::operator=(initializer_list...相互之间应该在参数数量或者类型上有所区别。

    93010

    【c++11】可变参数模版

    C++11 新增了两个:移动构造函数和移动赋值运算符重载 针对移动构造函数和移动赋值运算符重载有一些需要注意的点如下: 如果你没有自己实现移动构造函数,且没有实现析构函数 、拷贝构造、拷贝赋值重载中的任意一个...如果你没有自己实现移动赋值重载函数,且没有实现析构函数 、拷贝构造、拷贝赋值重载中的任意一个,那么编译器会自动生成一个默认移动赋值。...由于语法不支持使用args[i]这样方式获取可变参数,所以我们的用一些奇招来一一获取参数包的值 递归展开参数包 // 递归终止函数 template void ShowList(const...每次调用 ShowList 都会根据提供的参数数量和类型进行相应地展开并打印。 逗号表达式 (PrintArg(args), 0)... 允许我们对每个参数进行操作,这在展开可变参数包时非常有用。...Args> void emplace_back (Args&&... args); emplace_back 是 C++ 标准库容器(例如 std::vector, std::deque 等)的一个成员函数

    2900

    【C++航海王:追寻罗杰的编程之路】C++11(三)

    默认成员函数就是我们不写编译器会生成一个默认的。 C++11 新增了两个:移动构造函数和移动赋值运算符重载。...针对移动构造函数和移动赋值运算符重载有一些需要注意的点如下: 如果你没有自己实现移动构造函数,且没有实现析构函数 、拷贝构造、拷贝赋值重载中的任意一个。那么编译器会自动生成一个默认移动构造。...如果你没有自己实现移动赋值重载函数,且没有实现析构函数 、拷贝构造、拷贝赋值重载中的任意一个,那么编译器会自动生成一个默认移动赋值。...由于语法不支持使用args[i]这样方式获取可变 参数,所以我们的用一些奇招来一一获取参数包的值。...::string("sort")); return 0; } STL容器中的emplace相关接口函数: std::vector::emplace_back std::list::emplace_back

    9610

    【笔记】《C++Primer》—— 第14章:重载运算和类型转换

    ,参数和函数体 重载运算符的参数数量必须和这个运算符默认情况下的参数一致,而且其优先级和结合律无法改变即与默认情况一致 有的运算符(如加号+)有一元版本和二元版本,我们用参数数量区分它们 我们不能创建新的运算符...我们可以像普通的运算符一样使用重载的运算符,也可以像普通的函数一样使用重载运算符函数,当这个函数是成员函数时,我们也可以像使用普通的成员函数一样使用它 重载运算符的本质是函数调用,因此向逻辑运算符,逗号运算符之类的运算符内在的短路求值特性等将被舍弃...,参数们都会被以未定义的顺序求值 尽管我们可以重载大多数的运算符,但是对于逗号运算符,取地址运算符和逻辑运算符我们一般不去重载它因为容易起误会 我们应只在操作含义清晰明了时才重载运算符,且有些运算符我们最好还限定其成员性...int值,这样编译器才能区分出版本 14.7 成员访问运算符 箭头运算符必须是成员函数,解引用运算符一般也是类的成员 解引用运算符使用时应该检查目标是否在作用范围内 箭头运算符一般不会有自己的操作...// 用std::function来统一不同类型的可调用对象 // 接受lambda std::function f1 = [](int i, int j) {return

    66810

    第 14 章 重载运算与类型转换

    第 14 章 重载运算与类型转换 标签(空格分隔): C++Primer 学习记录 运算符重载 类型转换 ---- 第 14 章 重载运算与类型转换 14.1 基本概念 14.2 输入和输出运算符 14.3...重载运算符函数与该运算符作用的运算对象数量一样多。 除了重载的函数调用运算符 operator()之外,其他重载运算符不能含有默认实参。 当一个重载的运算符是成员函数时,this绑定到左侧运算对象。...成员运算符函数的(显式)参数数量比运算对象的数量少一个。...所以,不建议重载逗号、取地址、逻辑与和逻辑或运算符。 重载运算符的返回类型通常情况下应该与其内置版本的返回类型兼容。...函数调用运算符必须是成员函数。一个类可以定义多个不同版本的调用运算符,相互之间应该在参数数量或类型上有所区别。

    90260

    【C++】STL 容器 - vector 动态数组容器 ⑥ ( 使用迭代器遍历 vector 容器步骤 | 获取指容器向首元素的迭代器 begin 函数 | 获取末尾迭代器 | * 迭代器解引用 )

    ::iterator it = vec.begin(); 然后 , 获取 迭代器 指向元素的内容 , 使用 * 操作符 , 实际上调用的是 重载 * 运算符函数 ; *it 再后 , 对 迭代器 进行自增操作..., 自增 ++ 操作实际上调用的是 重载 ++ 运算符函数 , 用于递增迭代器 , 执行完毕后 , 迭代器指向下一个元素 ; it++ 最后 , 判定迭代器 是否迭代到了 容器末尾 , 调用 vector...二、 iterator 迭代器常用 api 简介 1、vector 容器类 begin 函数 - 获取指容器向首元素的迭代器 调用 vector 容器类 begin 函数 , 可以 获取指容器向首元素的迭代器...可以用来修改容器中的元素 ; 第二个重载版本函数 是 常量迭代器 , 不能用来修改容器中的元素 ; 返回的迭代器 可以使用 * 操作符进行解引用操作 , 获取迭代器指向的元素的值 ; 代码示例 : #include...之后一个位置 // 下面的代码会造成异常 , 不能获取对应的元素值 cout << *it << endl; // 控制台暂停 , 按任意键继续向后执行 system("pause");

    2.9K10

    【笔记】《C++Primer》—— 第一部分:C++基础

    || 指针不能自动转换为int,即便指针的值为0 赋值运算符的优先级是很低的,可以利用这一点要增加括号才能简化循环的操作。.../减1,这导致了性能比前置版本稍差,如无必要全部递增减都应该使用前置版本来提高性能表现 条件运算符?...可对数组进行sizeof推断可以返回整个数组的大小,但是当这个数组被作为参数传递后这个效果会消失,数组会被转为指针,只能返回指针本身大小了 逗号运算符比较少用到,它的优先级是所有运算符中最低的。...当有构造函数时,编译器将不会默认创建构造函数,C11此时可以用 [类名]()=default 来要求编译器生成一个默认行为 在构造函数和函数体间用冒号连接一段以逗号分隔的调用串,调用名为函数的成员,即为构造函数的初始值列表...,可以很方便地在函数体是空时完成构造函数中对值的赋值 用vector类来代劳内存分配等能避免拷贝构造时复杂的传值过程 访问控制符有效范围直到下个访问控制符出现或者到达类的结尾,控制符可以出现多次 有时需要外部的接口函数也可以访问类内的非公有成员

    1.5K40

    容器适配器:深入理解Stack与Queue的底层原理

    vector和list,deque的应用并不多,而目前能看到的一个应用就是,STL用其作为stack和queue的底层数据结构。...受限的接口:与完整的容器不同,栈的接口限制了用户只能通过栈顶进行操作,不允许直接访问栈中的其他元素。 主要操作: push:向栈顶添加一个元素。 pop:移除栈顶的元素。...底层容器:栈通常使用 deque 或 vector 作为底层容器来存储元素。选择哪种容器取决于具体的实现和性能要求。 模板类:栈是一个模板类,可以存储任意类型的元素。...模拟实现 templatestd::deque> class stack { public: // 向栈顶添加一个元素 void...我们使用std::priority_queue来管理这些任务,并通过重载operator的优先级比较规则。优先级最高的任务(priority值最小)会首先被处理。

    18010

    【C++】STL 容器 - vector 动态数组容器 ⑤ ( vector 容器元素访问 | at 函数 | [] 运算符重载 函数 | vector 容器首尾元素访问 )

    文章目录 一、 vector 容器元素访问 1、vector 容器访问指定索引的元素 - at 函数 2、vector 容器访问指定索引的元素 - [] 运算符重载 函数 二、 vector 容器首尾元素访问.... 2、vector 容器访问指定索引的元素 - [] 运算符重载 函数 vector 容器可以使用 [] 运算符访问其元素 , 调用的是 [] 运算符重载 函数 , 函数原型如下 : reference...operator[](size_type pos); 该函数返回 vector 容器中指定位置的元素的引用 ; 该 [] 运算符重载函数 与 at 函数一样 , 如果 位置参数 超出了容器的范围..., [] 运算符重载函数 会抛出异常 ; 因此,在使用 [] 运算符重载之前,也应该先检查位置是否在容器的范围内 ; 代码示例 : #include "iostream" using namespace...} std::cout std::endl; // 控制台暂停 , 按任意键继续向后执行 system("pause"); return 0; }; 二、 vector

    18510

    C++11:新特性&右值引用&移动语义

    (初始化列表)的使用范围,使其可用于所有的内置类型和用户自 定义的类型(包括定位new表达式),使用初始化列表时,可添加等号(=),也可不添加。...而C++11 新增了两个:移动构造函数和移动赋值运算符重载 (1)如果你没有自己实现移动构造函数,且没有实现析构函数 、拷贝构造、拷贝赋值重载中的任 意一个。...(2)如果你没有自己实现移动赋值重载函数,且没有实现析构函数 、拷贝构造、拷贝赋值重载中 的任意一个,那么编译器会自动生成一个默认移动赋值。...由于语法不支持使用args[i]这样方式获取可变 参数,所以我们的用一些奇招来一一获取参数包的值。 sizeof...(args)可以帮助我们打印出可变参数包的参数数量。...); return 0; } 其实我们用逗号表达式本质上是通过这个式子前面在进行推断的通过,后面的0是最终返回给arr用来初始化的。

    10610

    C++系列笔记(十一)

    lambda表达式的通用语法 lambda 表达式总是以方括号打头,并可接受多个状态变量,为此可在捕获列表([…])中指定这些状态变量,并用逗号分隔: [ StateVar1, StateVar2] (...表达式还可接受多个输入参数,为此可用逗号分隔它们: [StateVar1, StateVar2 ] (Type1& var1, Type2& var2){//code here;} 二元函数对应的lambda...仅当在编辑阶段知道序列将存储多少位时才能使用bitset。 vector可动态的添加标志 vector是对std::vector的部分具体化,用于存储布尔数据。...实例化: vector vecBool(10, true); 即它最初包含10个布尔元素,且每个元素都被初始化为 1 (即true) 理解智能指针   智能指针类重载了解除引用运算符(*')...C++11 摒弃了std::auto_ptr,您应使用std::unque_ptr,这种指针不能按值传递,而只能按引用传递,因为其复制构造函数和复制赋值运算符都是私有的。

    1.3K20

    泛型算法

    例如sort 算法默认使用元素类型的 运算符,但是可以使用sort的重载版本,额外定义比较的规则 向算法传递参数 标准库中可以接受的比较函数一般返回一个bool值,表示是否小于或者是否相等。...:重载了函数调用运算符的类,以及lambda表达式。...可以在函数中返回一个lambda表达式,此时返回的lambda 中不应该包含引用捕获 使用引用捕获的时候需要注意,在一次或者多次调用lambda表达式的时候应该保证引用的对象仍然有效,同时需要保证对象的值是我们所期待的...因此在使用lambda的时候尽量减少捕获变量的数量,同时尽量不使用引用捕获 除了显式列出我们希望使用的所来自所在函数的变量外,还可以让编译器根据lambda体中的代码来推断我们要使用哪些变量。...接受单独的beg2 或者 beg2和end2的算法用这些迭代器表示第二个输入范围,这些算法通常使用第二个范围中的元素与第一个输入范围结合来进行一些运算 算法命名规范 除了参数规范,算法还遵循一套命名和重载

    54730

    第 10 章 泛型算法

    vector vec; // 空向量 fill_n(vec.begin(), 10, 0); // 错误,向空向量写入元素!...编译器会根据 lambda体中的代码来推断我们要使用哪些变量,&表示引用捕获,=表示值捕获。当混合使用了隐式和显式捕获时,捕获列表中的第一个元素必须是一个 &或=,来制定默认引用方式。...通过使用流迭代器,可以用泛型算法从流对象读取数据以及向其写入数据。流迭代器在绑定了输入/输出流后,就可以当做是普通的数据容器的迭代器来使用。...// 在一个逗号分隔的列表中查找最后一个元素并将其输出 auto rcomma = find(line.crbegin(), line.crend(), ','); // 错误,将逆序输出单词的字符 cout...(非重载)版本,该版本接受一个谓词代替元素值,接受谓词参数的算法都有附加的 _if后缀。

    84080

    C++的输入输出特点、运算符重载及标准模板库STL

    这就是重载函数。重载函数常用来实现功能类似而所处理的数据类型不同的问题。重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。...这样,您就能使用自定义类型的运算符。重载的运算符是带有特殊名称的函数,函数名是由关键字operator 和其后要重载的运算符符号构成的。与其他函数一样,重载运算符有一个返回类型和一个参数列表。...”,代码如下: struct node { int x,y; bool operator 重载‘运算符,函数返回值为布尔类型(比较运算符只有是和否两种值)...vector支持随机访问,即对于任意的下标0≤i用[i] 取值。但它不是链表,不支持在任意位置0(1) 插入。为了保证效率,元素的增删一般应该在末尾进行。...内部实现是一棵以key为关键码的红黑树。map的key和value可以是任意类型,其中key必须定义“小于号”运算符。

    80420

    Lambda表达式用法超详细整理!!!

    如果lambda的函数体包含任何一个单一的return语句之外的内容,且未指定返回类型,则返回void 向lambda传递参数 与一个普通函数调用类似,调用一个lambda时给定的实参被用来初始化lambda...endl; } int main() { test(); system("pause"); return 0; } lambda以一对[]开始,我们可以在其中提供一个以逗号分隔的名字列表...也就是说,在该指针(或引用)被捕获的时刻,绑定的对象的值是我们所期望的,但在lambda执行时,该对象的值已经完全不同了。 一般来说,我们应该尽量减少捕获的数据量,来避免潜在的捕获导致的问题。...要修改传递进来的a的拷贝,可以添加mutable修饰符。 6、&a。将a按引用进行传递。 7、a, &b。将a按值进行传递,b按引用进行传递。 8、=,&a, &b。...在lambda表达式产生的类中含有一个重载的函数调用运算符。

    84530
    领券