Cpp-Primer-5th-Exercises-Chapter-14

Exercise 14.1 1 2 3 4 5 6 7 /* diff */ // 1. an overload operator function could be called directly. // 2. an overload operator function must either be a member of class of have at least one parameter of class type. // 3. A few built-in operators guarantee the order in which operands are evaluated. These overload versions of these operators do not preserve order of evaluation and/or shourt-circuit evaluation, it is usually a bad idea to overload them.

Cpp-Primer-5th-Exercises-Chapter-13

Exercise 13.1 1 2 3 4 5 6 7 8 // Within a class type, if the first parameter of one constructor is the reference of the class type itself, and left parameters all have default values, then this constrcutor is copy constructor. // copy constructor is utilized in copy initialization: // 1. Define variable using an =; // 2. Pass an object as an argument to a parameter of noreference type; // 3.

Cpp-Primer-5th-Exercises-Chapter-12

Exercise 12.1 1 2 3 // b1 has 4 elements; // b2's code block has ended, os b2 is destroyed, there is no point in saying how many elements in b2. Exercise 12.2 1 2 // See StrBlob.h StrBlob.h 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 classStrBlobPtr; classStrBlob { friend classStrBlobPtr; friend classConstStrBlobPtr; public: typedef vector<string>::size_type size_type; StrBlob(); StrBlob(initializer_list<string> il); size_type size() const {return data->size();} bool empty() const {return data->empty();} void push_back(const string &t) {data->push_back(t);} void pop_back(); string &front(); const string &front() const; string &back(); const string &back() const; StrBlobPtr begin(); StrBlobPtr end(); private: shared_ptr<vector<std::string>> data; void check(size_type i, const string &msg) const; }; StrBlob::StrBlob(): data(make_shared<vector<string>>()) {} StrBlob::StrBlob(initializer_list<string> il): data(make_shared<vector<string>>(il)) {} void StrBlob::check(size_type i, const string &msg) const { if(i >= data->size()) throw out_of_range(msg); } string &StrBlob::front() { check(0, "front on empty StrBlob"); return data->front(); } const string &StrBlob::front() const { check(0, "front on empty StrBlob"); return data->front(); } string &StrBlob::back() { check(0, "badk on empty StrBlob"); return data->back(); } const string &StrBlob::back() const { check(0, "back on empty StrBlob"); return data->back(); } classStrBlobPtr { public: StrBlobPtr(): curr(0) {} StrBlobPtr(StrBlob &a, size_t sz = 0): wptr(a.

Cpp-Primer-5th-Exercises-Chapter-11

Exercise 11.1 1 2 3 // element of map type is key-value pair, in another word, value is associated with keyword and could be accessed through keyword, like map[keyword]. // element of vector contains one individual object, compared with map, could also access the element through style like vector[index], while index is an integer. Exercise 11.2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 int main() { // list: insert an element into a position which is not head or back.

Cpp-Primer-5th-Exercises-Chapter-10

Exercise 10.1 1 2 3 4 5 6 7 8 9 10 11 12 13 int main() { int i; vector<int> vi; while(cin >> i) vi.push_back(i); cout << "Specify a number: " << endl; cin.clear(); cin >> i; cout << "There are " << count(vi.begin(), vi.end(), i) << " count of " << i << " in input numbers" << endl; } Exercise 10.2 1 2 3 4 5 6 7 8 9 10 11 12 13 int main() { string i; list<string> ls; while(cin >> i) ls.