随笔分类 -  【02】C++

摘要:反向迭代器 • 反向迭代器就是在容器中从尾元素向首元素反向移动的迭代器。对于反向迭代器,递增(以及递减)操作的含义会颠倒过来。 • 递增一个反向迭代器(++it)会移动到前一个元素;递减一迭代器(--it)会移动到下一个元素。 • 除了forward_list之外,其他容器都支持反向迭代器。我们可以 阅读全文
posted @ 2018-05-29 21:42 苏格拉底的落泪 阅读(188) 评论(0) 推荐(0)
摘要:• 在编写C++程序的时候,偶尔需要用到前置声明(Forward declaration)。下面的程序中,带注释的那行就是类B的前置说明。这是必须的,因为类A中用到了类B,而类B的声明出现在类A的后面。如果没有类B的前置说明,下面的程序将不同通过编译,编译器将会给出类似“缺少类型说明符”这样的出错提 阅读全文
posted @ 2018-05-22 14:35 苏格拉底的落泪 阅读(567) 评论(0) 推荐(0)
摘要:移动构造函数 1. 移动构造函数示例: #include<iostream> #include<vector> #include<string> using namespace std; class Test { public: Test(const string& s = "hello world 阅读全文
posted @ 2018-05-21 19:49 苏格拉底的落泪 阅读(2016) 评论(0) 推荐(0)
摘要:练习答案 一、访问元素 关联容器额外类型别名 key_type 此容器类型的关键字类型 mapped_type 每个关键字关联的类型,只 适用于map mapped_type 对于set,与key_type相同对于map,为pair<const key_type, mapped_type> 二、关联 阅读全文
posted @ 2018-05-17 10:40 苏格拉底的落泪 阅读(183) 评论(0) 推荐(0)
摘要:一、什么是拷贝构造函数 首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a = 100; int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。 下面看一个类对象拷贝的简单例子: 1 #include<iostream> 2 using n 阅读全文
posted @ 2018-05-14 15:05 苏格拉底的落泪 阅读(1770) 评论(0) 推荐(0)
摘要:右值引用 左值和右值 (1)两者区别: ①左值:能对表达式取地址、或具名对象/变量。一般指表达式结束后依然存在的持久对象。 ②右值:不能对表达式取地址,或匿名对象。一般指表达式结束就不再存在的临时对象。 总结:一般而言,一个左值表达式表示的是一个对象的身份,而一个右值表达式表示的是对象的值。 (2) 阅读全文
posted @ 2018-05-09 18:22 苏格拉底的落泪 阅读(575) 评论(0) 推荐(0)
摘要:1 #include <iostream> 2 #include <memory> 3 4 struct Foo 5 { 6 Foo() { std::cout << "Foo...\n"; } 7 ~Foo() { std::cout << "~Foo...\n"; } 8 }; 9 10 str 阅读全文
posted @ 2018-05-09 16:19 苏格拉底的落泪 阅读(208) 评论(0) 推荐(0)
摘要:contexpr 1. constexpr变量 1对于修饰的变量而言,const并未区分出编译常量和运行常量;constexpr限定在编译器常量。 2. constexpr函数 #include <iostream> #include <array> using namespace std; con 阅读全文
posted @ 2018-05-09 12:31 苏格拉底的落泪 阅读(293) 评论(0) 推荐(0)
摘要:std::jthread 1. 自动 join std::jthread 在析构时会自动调用 join()。 不再需要手动 join() 或 detach(),避免了资源泄露或程序崩溃。 2. 支持取消(stop_token) std::jthread 可以配合 stop_token 实现线程的 协 阅读全文
posted @ 2018-05-08 21:45 苏格拉底的落泪 阅读(460) 评论(0) 推荐(0)
摘要:拷贝控制和资源管理 • 类的行为像一个值。意味着它应该有自己的状态,当我们拷贝一个像值得对象时,副本和原对象是完全独立的,改变副本不会对原对象有任何影响。 • 行为像指针的类则共享状态。当我们拷贝一个这种类的对象时,副本和原对象使用相同的底层数据,改变副本也会改变原对象。 13.2节练习 1 #in 阅读全文
posted @ 2018-05-07 19:26 苏格拉底的落泪 阅读(251) 评论(0) 推荐(0)
摘要:拷贝控制、赋值和销毁 如果一个构造函数的第一个参数是自身类的引用,且额外的参数都有默认值,则此构造函数是拷贝控制函数(拷贝构造函数不应该是explicit的)。 如果我们没有为一个类定义拷贝构造函数,编译器会为我们定义一个,与合成默认构造函数不同, 即使我们定义了其他构造函数,编译器也会为我们合成一 阅读全文
posted @ 2018-05-03 20:21 苏格拉底的落泪 阅读(351) 评论(0) 推荐(0)