![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++primer
xnnswmzdszyd
这个作者很懒,什么都没留下…
展开
-
9.5.3节练习
string搜索操作://搜索操作返回指定字符出现的下标,如果未找到则返回npos。s.find(args); //查找s中args第一次出现的位置s.rfind(args); //查找s中args最后一次出现的位置s.find_first_of(args); //在s中寻找args中任何一个字符最后一次出现的位置。s.find_last_of(args); //在s中查找ar...原创 2019-05-02 15:46:22 · 101 阅读 · 0 评论 -
函数调用运算符
struct absInt{ int operator()(int val) const{ return val < 0 ? -val:val; }};这个类定义了操作:函数调用运算符,它负责接受一个int类型的实参,然后返回该实参的绝对值。调用:int i=-42;absInt absObj; //含有函数运算符的对象int ui = a...原创 2019-07-02 10:48:33 · 336 阅读 · 0 评论 -
14.2.2节练习
istream &operator>>(istream &is, Sales_data &item){ double price;//不需要初始,因为我们将先读入数据到price,之后才使用它 is >> item.bookNo >> item.units_sold >> price; if(is)...原创 2019-07-02 09:05:54 · 72 阅读 · 0 评论 -
14.2.1节练习
练习14.6:为你的Sales_data类定义输出运算符。// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。#include "stdafx.h"#include <iostream>#include <vector>#include <string>using namespace std;class S...原创 2019-07-01 21:01:32 · 75 阅读 · 0 评论 -
14.1节练习
//错误 不能为int重定义内置运算符int operator+(int, int);当运算符作用于内置类型的运算对象时,我们无法改变运算符的含义。只能重载已经有的运算符而不能发明新的符号。//一个非成员运算符函数的等价调用data1 + data2; //普通表达式operator+(data1, data2); // 等价的函数调用//显式调用成员运算函数...原创 2019-07-01 16:57:20 · 131 阅读 · 0 评论 -
12.1.6练习
weak_ptr<T> w; //定义一个空的weak_ptrweak_ptr<T> w(sp); //定义一个weak_ptr并与shared_ptr绑定 这个操作不会增加计数器w=p; //给weak_ptr赋值 此操作不会增加p的计数器w.reset(); //将 weak_ptr置空w.use_count(); // 获取与weak_pt...原创 2019-06-12 20:56:20 · 82 阅读 · 0 评论 -
12.1.5节练习
unique_ptr<T> u1; //u1是一个空的T类型的智能指针unique_ptr<T, D> u2; // u2,空的类型为T的智能指针 自定义的释放函数类型为D unique_ptr<T, D> u(d); // 空的智能指针u 类型为T 自定义释放函数的类型为D 函数名为du = nullptr; //将u置为空 ...原创 2019-05-17 22:17:09 · 98 阅读 · 0 评论 -
12.1.4节练习
void f(destination &d /* 其它参数 */){ connection c = connect(&d); shared_ptr<connection> p(&c, end_connection); //使用链接 //当f退出时(即使由于异常而退出),connection 会被正确关闭}不使用相同的内置...原创 2019-05-17 16:13:13 · 97 阅读 · 0 评论 -
5.13日志
一周没有光顾我的c++了,前面的有些淡忘,学东西贵在思考和重复,就像唱歌一样多唱几遍才能记住歌词就算是天才的歌唱家如果只听或者唱一遍也很难记住歌词。随性回忆一下前面看的内容:智能指针 维持一个数据结构当检测到最后一个指向某块内存的指针被销毁时,释放指针。shared_ptr<vector<int>> p = make_shared<vector<...原创 2019-05-13 10:42:07 · 80 阅读 · 0 评论 -
12.1.2节练习
vector<int> a = { 0, 1, 2, 3, 4, 5, 6, 7, 8 }; vector<int> *pi = new vector<int>(a.begin(), a.end());练习12.6:编写函数,返回一个动态分配的int的vector。将此vector传递给另一个函数,这个函数读取标准输入,将读取的内容把存在vector元...原创 2019-05-13 10:29:57 · 150 阅读 · 0 评论 -
12.1.3节练习
explicit修饰的构造函数:1.不能使用隐式的类型转换。2.必须使用直接初始化形式。能够通过一个实参调用的构造函数定义了一条从构造函数的参数类型向类类型隐式转换的规则。string null_book = "9-999-99999-9";//构造一个临时的sales_data对象item.combine(null_book);上面,item是之前定义好的一个对象,它的c...原创 2019-05-15 21:00:32 · 151 阅读 · 0 评论 -
12.1.5节练习
继承上一次的操作,在unique_ptr中自定义 释放函数的过程中又这样的操作:unique_ptr<MyClass, decltype(freefuc)*> p2(new MyClass, freefuc); 这里的freefuc的参数必须是 freefuc(Myclass *p); 就像下面这段代码一样。// ConsoleApplication1.cpp : 定义...原创 2019-05-20 10:14:53 · 139 阅读 · 0 评论 -
12.1.2直接管理内存
int *pi = new int; //pi指向一个动态分配的,未初始化的无名对象string *ps = new string; //初始化为空stringint *pi = new int(1024); //初始值为1024string *ps = new string(10, '9'); //初始值为10个9vector<int> *pv = new vect...原创 2019-05-07 10:47:57 · 172 阅读 · 0 评论 -
12.1.1节练习
练习12.1:在此代码的结尾,b1和b2各包含多少个元素?StrBlob b1;{ StrBlob b2 = {"a", "an", "the"}; b1 = b2; b2.push_back("about");}答:b1包含4个元素 b2由于新加了一个元素包含4个元素。因为里面用了共享内存练习12.2:编写你自己的StrBlob类,包含const版...原创 2019-05-07 09:30:58 · 161 阅读 · 0 评论 -
9.6节练习
容器适配器练习9.52:使用stack处理括号化的表达式。当你看到一个左括号,将其记录下来。当你在一个左括号之后看到一个右括号,从stack中pop对象,直至遇到右括号,将左括号也一起弹出栈。让后将一个值(括号内的运算结果)push到栈中,表示一个括号化的(子)表达式已经处理完毕,被其运算结果所替代。// ConsoleApplication1.cpp : 定义控制台应用程序的入...原创 2019-05-04 12:07:10 · 163 阅读 · 0 评论 -
9.5.5节练习
//string和数值之间的转换to_string(val); //val可以是任何算数类型。stoi(s,p,b); //s:待转换字符 stol(s,p,b); //p: size_t 类型指针,表示string字符串中第一个非数值字符的下标。stoul(s,p,b); //b:默认10进制。stoll(s,p,b);stoull(s,p,b);stof(s,p,b...原创 2019-05-02 23:00:16 · 85 阅读 · 0 评论 -
16.1模板
template <typename T>int compare(const T &v1, const T &v2){ if(v1 < v2) return -1; if(v2 < v1) return 1; return 0;}模板类型参数:template <typename T> T foo(T *...原创 2019-07-03 14:33:09 · 80 阅读 · 0 评论