Exercise 13.31: Give your class a < operator and define a vector of HasPtrs. Give that vector some elements and then sort the vector. Note when swap is called.
將您在之前練習做出來的那個HasPtr類別給它定義一個<運算子,且定義一個由HasPtr元素所組成的vector。加入一些元素到這個vector,然後排序這個vector內的元素。請注意在排序這些元素時,HasPtr的swap被調用的時機。
.cpp
#include<string>
#include<vector>
#include<algorithm>
#include<iterator>
#include"HasPtr.h"
using namespace std;
int main() {
HasPtr hp,hp1("孫守真"),hp2(string("阿彌陀佛")),hp3("淨空老法師"),hp4("海賢老和尚"),hp5("阿彌陀佛");
vector<HasPtr>vhp{hp,hp1,hp2,hp3,hp4,hp5};
ostream_iterator<string>o(cout, ",");
for (HasPtr hp : vhp)
o++=hp.getStr() ;
std::cout<< std::endl;
sort(vhp.begin(), vhp.end());
for (HasPtr hp : vhp)
o++ = hp.getStr();
std::cout << std::endl;
}
HasPtr.h
#ifndef HASPTR_H
#define HASPTR_H
#include<string>
#include<iostream>
class HasPtr
{
friend void swap(HasPtr&, HasPtr&);
public:
HasPtr(const std::string& s = std::string()) : ps(new std::string(s)), i(0) {}
//拷貝建構器:每個HasPtr物件都有一個ps指標指向的那個string的副本
HasPtr(const HasPtr& p) : ps(new std::string(*p.ps)), i(p.i) {}
HasPtr& operator=(HasPtr);
bool operator<(const HasPtr&);
std::string& getStr();
~HasPtr() { delete ps; }
private:
std::string* ps;
int i;
};
inline void swap(HasPtr&lhs,HasPtr&rhs){//頁517
using std::swap;
swap(lhs.ps, rhs.ps);
swap(lhs.i, rhs.i);
std::cout << "swap here!感恩感恩 南無阿彌陀佛" << std::endl;
}
inline HasPtr& HasPtr::operator=(HasPtr rhs) {//頁518
swap(rhs, *this);
return *this;
}
inline bool HasPtr::operator<(const HasPtr& rhs) {
if ((*ps < *rhs.ps) && (i<=rhs.i))
{
return true;
}
return false;
}
inline std::string& HasPtr::getStr() {
return *ps;
}
#endif // !HASPTR_H
C++自修入門實境秀 547 重新譯撰 《C++ Primer 5th》
13.3 swap對調 練習13.31~
上一集:
https://www.facebook.com/oscarsun72/videos/2668054499972334/
下一集:
全部:http://bit.ly/2NoA2ID 原檔下載:http://bit.ly/2Ixe2Vc
課文: http://bit.ly/2FIHV57
http://bit.ly/2mttmfa(第二篇)
第10-11章: http://bit.ly/2MuPmiZ
章12: http://bit.ly/2Rw53sH
重譯12章:http://bit.ly/2V8UgZ7
http://bit.ly/2G2fPSg (docx)
重譯11章:http://bit.ly/39P7HRU
第三篇:http://bit.ly/2UaFbDY
第三篇13章:http://bit.ly/33mh49y
https://play.google.com/books/reader?id=J1HMLyxqJfgC&pg=GBS.PT957.w.1.0.57
講義下載:
http://bit.ly/2khF8Ic (全部)
程式碼:
https://github.com/oscarsun72/prog1
緣起:http://bit.ly/2XwHOUH