//#include <iostream>
//using namespace std;
//int main(int argc, char *argv[])
//{
// cout << "Hello World!" << endl;
// return 0;
//}
//1.6.2 -1
//#include<iostream>
//int main()
//{
// int x =8;
// int y =6;
// std::cout << std::endl;
// std::cout << x - y << " " << x * y <<" "<< x +y;
// std::cout << std::endl;
// return 0;
//}
//1.6.2 -3
//#include<iostream>
//int main()
//{
// std::cout <<"Hello Buddd";
// return 0;
//}
//2.8.2 -1
//东西太简单,也得去做
//#include<iostream>
//int main()
//{
// std::cout<<"IS";
//}
//2.8.2 -4
//#include<iostream>
//using namespace std;//std is namespace !
//int a();
//int main()
//{
// a();
// return 0;
//}
//int a()
//{
// cout<<"AAAA"<<endl;
// return 0;
//}
////3.10.2 -1
//#include<iostream>
//enum YOURCARDS{ACE=43,JACK,QUEEN,KING}; //变量的类型 变量类型中的值 类比一下 比如int
//using namespace std;
//int main()
//{
// cout<<"QUEEN"<<QUEEN<<endl;
//}
//////3.10.2 -2
//#include<iostream>
//int main()
//{
// using namespace std;
// cout<<"size of int: "<<sizeof(int)<<endl;
// cout<<"size of unsigned int: "<<sizeof(unsigned int)<<endl;
// cout<<"size of long long: "<<sizeof(long long)<<endl;
// return 0;
//}
////3.10.2 -3
//#include<iostream>
//int main()
//{
// const float PI =3.1415926;
// using namespace std;
// cout<<"PI: "<<PI<<endl;
// float circle_radious =3;
// auto circle_perimeter =0.0;
// auto circle_area = 0.0;
// circle_perimeter =2*PI*circle_radious;
// circle_area = PI*circle_radious*circle_radious;
// cout<<"circle's perimeter: "<<circle_perimeter<<endl;
// cout<<"circle's area: "<<circle_area<<endl;
// return 0;
//}
//3.1
//#include<iostream>
//using namespace std;
//int main()
//{
// cout<<"This program will help you multiply two numbers"<<endl;
// cout<<"Enter the first number: "<<endl;
// int FirstNumber = 11;
// //cin>>FirstNumber;//qt框架下不能用这个
// cout<<"Enter the second number: "<<endl;
// int SecondNumber = 12;
// //cin>>SecondNumber;
// int MultiplicationResult =FirstNumber *SecondNumber;
// cout<<FirstNumber<<" X "<<SecondNumber<<" = ";
// cout<<MultiplicationResult<<endl;
// return 0;
//}
////3.2
//#include<iostream>
//using namespace std;
//int MultiplyNumbers()
//{
// cout<<"Enter the first number: "<<endl;
// int FirstNumber = 11;
// //cin>>FirstNumber;//qt框架下不能用这个
// cout<<"Enter the second number: "<<endl;
// int SecondNumber = 12;
// //cin>>SecondNumber;
// int MultiplicationResult =FirstNumber *SecondNumber;
// cout<<FirstNumber<<" X "<<SecondNumber<<" = ";
// cout<<MultiplicationResult<<endl;
//}
//int main()
//{
// cout<<"This program will help you multiply two numbers"<<endl;
// MultiplyNumbers();
// return 0;
//}
////3.3
//#include<iostream>
//using namespace std;
//int FirstNumber = 11;
//int SecondNumber = 12;
//int MultiplicationResult =0;
//int MultiplyNumbers()
//{
// //cout<<"Enter the first number: "<<endl;
// //cin>>FirstNumber;//qt框架下不能用这个
// //cout<<"Enter the second number: "<<endl;
// //cin>>SecondNumber;
// MultiplicationResult =FirstNumber *SecondNumber;
// cout<<FirstNumber<<" X "<<SecondNumber<<" = ";
// cout<<MultiplicationResult<<endl;
//}
//int main()
//{
// cout<<"This program will help you multiply two numbers"<<endl;
// MultiplyNumbers();
// FirstNumber =1;
// cout<<FirstNumber<<endl;
// cout<<SecondNumber<<endl;
// return 0;
//}
////3.4
//#include<iostream>
//using namespace std;//放哪都行啊
//int main()
//{
// cout<<"Size of bool: "<<sizeof(bool)<<endl;
// cout<<"Size of char: "<<sizeof(char)<<endl;
// cout<<"Size of unsigned char: "<<sizeof(unsigned char)<<endl;
// cout<<"Size of double: "<<sizeof(double)<<endl;
// return 0;
//}
////3.5
//#include <iostream>
//using namespace std;
//int main()
//{
// auto Flag = true;
// auto Number = 250000;
// cout<<"Flag = "<<Flag;
// cout<<" , "<<"sizeof(Flag) = "<<sizeof(Flag)<<endl;
// cout<<"Number = "<<Number;
// cout<<" , "<<"sizeof(Number) = "<<sizeof(Number)<<endl;
//}
//#include<iostream>
//int main()
//{
// using namespace std;
// const auto PI = 22/7;
// cout<<"PI is "<<PI<<endl;
//// PI =1;
//}
//#include<iostream>
//using namespace std;
//enum CardinalDirections
//{
// North =25,
// South,
// East,
// West
//};
//int main()
//{
// cout<<North<<endl;
// unsigned short Number=0;
// Number--;
// cout<<Number<<" "<<endl;
//}
////4.4
//#include<iostream>
//#include<vector>
//using namespace std;
//int main()
//{
// vector<int> DynArrNums;
// DynArrNums.push_back(1);
// DynArrNums.push_back(11111);
// DynArrNums.push_back(122);
// DynArrNums.push_back(122);
// cout<<"DynArrNums's size: "<<sizeof(DynArrNums)<<endl;
// cout<<"DynArrNums's size: "<<DynArrNums.size()<<endl;
// int AnotherNum;
// AnotherNum =444;
// DynArrNums.push_back(AnotherNum);
// //显示最后一个数
// cout<<"Now: "<<DynArrNums[DynArrNums.size()-1]<<endl;
// //显示数的大小
// cout<<"DynArrNum's size is :"<<DynArrNums.size()<<endl;
// //容量capacity比size多
// cout<<"DynArrNum's capacity is :"<<DynArrNums.capacity()<<endl;
// //显示数的大小 对于动态数组,感觉sizeof 不适合
// cout<<"sizeof(DynArrNum) is :"<<sizeof(DynArrNums)<<endl;
// return 0;
//}
//4.5
//#include<iostream>
//using namespace std;
//int main()
//{
// char SayHello[]={'H','e','l','l','o','m','y','w','o','r','l','d','\0'};
//// SayHello[5] = '\0';
// //cout只能遇到空字符才能停止打印,如果没有空字符的话,程序将崩溃
// cout<<SayHello<<endl;
//}
////4.6
//#include<iostream>
//#include<string.h>
//#include<string>//两个不一样
//using namespace std;
//int main()
//{
// cout<<"Enter a word NOT longer than 20 charachers"<<endl;
// //初始化什么,初始话第一个元素,而不是出初始化全部
// char UserInput[4] ={'1','2','\0','1'};
// //sizeof不管反斜杠0的存在
// cout<<"sizeof(UserInput): "<<sizeof(UserInput)<<endl;
// //strlen()要遇到反斜杠就停止
// cout<<strlen(UserInput)<<endl;
// cout<<UserInput<<endl;
// return 0;
//}
////4.5
//#include<iostream>
//#include<string>
//using namespace std;
//int main()
//{
// string Greetings ("hello std::string!");
// cout<<Greetings<<endl;
// string A ("AAAAAAAAAAAAAAAAAAAAAAA");
// //字符串能直接相加
// Greetings =Greetings+A;
// string B;
// //字符串能直接赋值
// B = Greetings;
// cout<<"Greetings = "<<Greetings<<endl;
// cout<<"B = "<<B<<endl;
//}
////5.1
//#include<iostream>
//using namespace std;
//int main()
//{
// cout<<"hello" \
// <<endl;
// return 0;
//}
////5.2
////postincrement and preincrement
//#include<iostream>
//using namespace std;
//int main()
//{
// int MyInt =101;
// cout<<"Start value of integer being operated: "<<MyInt<<endl;
// int PostFixInc = MyInt++;
// cout<<"Result of Postfix Increment= "<<PostFixInc<<endl;
// cout<<"After Postfix Increment, MyInt = "<<MyInt<<endl;
// MyInt =101;
// int PreFixInc = ++MyInt;
// cout<<"Result of Pretfix Increment= "<<PreFixInc<<endl;
// cout<<"After Prefix Increment, MyInt = "<<MyInt<<endl;
// MyInt =101;
// int PreFixDec = --MyInt;
// cout<<"Result of Pretfix Decrement= "<<PreFixDec<<endl;
// cout<<"After Prefix Decrement, MyInt = "<<MyInt<<endl;
// MyInt =101;
// int PostFixDec = MyInt--;
// cout<<"Result of Postfix Decrement= "<<PostFixDec<<endl;
// cout<<"After Postfix Decrement, MyInt = "<<MyInt<<endl;
//}
////5.3
//#include<iostream>
//using namespace std;
//int main()
//{
// unsigned short UShortValue =12;
// cout<<"UShortValue: "<<UShortValue<<";";
// cout<<"after preincrement, UShortValue = "<<++UShortValue<<endl;
//}
////5.9
////证明一下右移1位除2,左移一位乘以2的问题
//#include<iostream>
//using namespace std;
//int main()
//{
// int InPut =2500;
// int OutPut= InPut<<1;
// cout<<"OutPut: "<<OutPut<<endl;
// return 0;
//}
//5.6.2 --2
////优先级
//#include<iostream>
//using namespace std;
//int main()
//{
// int number =10;
// int Result = number<<1+1<<1;
// cout<<"Result: "<<Result<<endl;
// return 0;
//}
////6.2
//#include<iostream>
//#include<string.h>
//using namespace std;
//int main()
//{
// char Buffer[20]={'\0'};
// cout<<"Enter a line of text: "<<endl;
// string LineEntered;
// LineEntered = "This fits b!";
// if(LineEntered.length()<20)
// {
// //没有这样的
// //Buffer = LineEntered;
// strcpy(Buffer,LineEntered.c_str());
// cout<<"BUffer contains: "<<Buffer << endl;
// }
// return 0;
//}
////6.6
//#include<iostream>
//using namespace std;
//int main()
//{
// cout<<"Enter two numbers"<<endl;
// int Num1 = 1, Num2 = 3;
// int Max =(Num1 > Num2) ? Num1 : Num2;
// cout<<"Max: "<<Max<<endl;
// return 0;
//}
////验证让那个for循环
////初始也得判断是否满足条件
//#include<iostream>
//using namespace std;
//int main()
//{
// for (int Index =1; Index<2;Index++)
// {
// cout<<"AAA"<<endl;
// }
//}
//6.15
////斐波那契数列怎么写
//#include <iostream>
//using namespace std;
//int FibonacciNum(int n)
//{
// if(n < 0){
// return -1;
// }else if(n == 0){
// return 0;
// }else if(n == 1){
// return 1;
// }else {
// return(FibonacciNum(n-1) + FibonacciNum(n-2));
// }
//}
//int main(){
// int num=10;
// if((num >= 0) && (num <= 50))
// {
// cout<<FibonacciNum(num)<<endl;
// }
// else
// {
// printf("error!");
// return 0;
// }
// return 0;
//}
////-1 is true
//#include<iostream>
//using namespace std;
//int main()
//{
// while(-1)
// {
// cout<<"-1 is OK "<<endl;
// }
//}
////6.72 -1
//#include<iostream>
//using namespace std;
//int main()
//{
// const int ARRAY_LEN = 5;
// int MyNumber[ARRAY_LEN]={-55,45,9889,0,45};
// for(int nIndex = ARRAY_LEN-1;nIndex>=0;--nIndex)
// cout<<"Number["<<nIndex<<"] = "<<MyNumber[nIndex]<<endl;
// return 0;
//}
////6.7.2 -4
//#include<iostream>
//using namespace std;
//int main()
//{
// enum RainbowOfColor
// {
// Red =0,
// Orange,
// Yellow,
// Green_1,
// Blue,
// Green_2,
// Pink
// };
// cout<<"Please Input Color"<<endl;
// int Color =0;
// switch(Color)
// {
// case Red:
// cout<<"Red is in the rainbow."<<endl;
// break;
// case Orange:
// cout<<"Orange is in the rainbow."<<endl;
// break;
// case Green_1:
// cout<<"Green_1 is in the rainbow."<<endl;
// break;
// case Blue:
// cout<<"Blue is in the rainbow."<<endl;
// break;
// case Green_2:
// cout<<"Green_2 is in the rainbow."<<endl;
// case Pink:
// cout<<"Pink is in the rainbow."<<endl;
// break;
// default:
// cout<<"The color is not in the rainbow"<<endl;
// break;
// }
// return 0;
//}
////7.5
/// 斐波那契数列
//#include<iostream>
//using namespace std;
//int GetFibNumber(int FibIndex)
//{
// if(FibIndex < 2)
// {
// return FibIndex;
// }
// else
// {
// return(GetFibNumber(FibIndex-2)+GetFibNumber(FibIndex-1));
// }
//}
//int main()
//{
// cout<<"Fibonacci"<<endl;
// int Index =5;
// cout<<"Fibinacci is "<<GetFibNumber(Index)<<endl;
//}
////7.8
////函数重载和数组传递
//#include<iostream>
//using namespace std;
//void DisplayArray(int Number[],int length)
//{
// cout<<Number[length-1]<<endl;
//}
//void DisplayArray(char Characters[],int length)
//{
// cout<<Characters[length-2]<<endl;
//}
//int main()
//{
// int MyNumbers[5] = {24,58,-1,2,45};
// DisplayArray(MyNumbers,4);
// char MyStatement[7] = {'h','e','l','l','o','\0'};
// DisplayArray(MyStatement,6);
// return 0;
//}
//7.9
////引用,把值给改了
//#include<iostream>
//using namespace std;
//const double PI = 3.14;
//void Area(double Radius,double& Result)
//{
// Result = PI*Radius*Radius;
//}
//int main()
//{
// double Radius = 10;
// double AreaFetched=0;
// Area(Radius,AreaFetched);
// cout<<AreaFetched<<endl;
// return 0;
//}
////7.11
////lambda
//#include<iostream>
//#include<algorithm>
//#include<vector>
//using namespace std;
//int main()
//{
// vector<int> MyNumbers;
// MyNumbers.push_back(1);
// MyNumbers.push_back(2);
// MyNumbers.push_back(3);
// cout<<MyNumbers[MyNumbers.size()-1]<<endl;
// //怎么看是升序还是降序
// sort(MyNumbers.begin(),MyNumbers.end(), \
// [](int Num1,int Num2){return(Num2<Num1);} );
// for(int i=0;i<3;i++)
// {
// cout<<"Mumber["<<i<<"] = "<<MyNumbers[i]<<endl;
// }
//}
////8.1
////引用云算法和地址云算符
//#include<iostream>
//using namespace std;
//int main()
//{
// int Age =30;
// const double PI =3.14;
// //use & to find the address in memory
// cout<<"Integer Age is at: "<< hex << &Age <<endl;
// cout<<"Double PI is located at "<<hex<< &PI <<endl;
//}
////8.2
//#include<iostream>
//using namespace std;
//int main()
//{
// int Age = 30;
// int* pInteger = &Age;
// //Displaying the value of pointer
// cout<<"Integer Age is at:"<<pInteger<<endl;
//}
////8.3
//#include<iostream>
//using namespace std;
//int main()
//{
// int Age =30;
// int* pInteger = &Age;
// cout<<"pInteger points to Age now"<<endl;
// //Display the value of pointer
// cout<<"pInteger= 0x"<<pInteger<<endl;
// int DogsAge =9;
// pInteger = &DogsAge;
// cout<<"pInteger points to DogsAge now"<<endl;
// cout<<"pInteger ="<<pInteger<<endl;
//}
//8.4
////解除引用运算符(*)来访问整数值
//#include<iostream>
//using namespace std;
//int main()
//{
// int Age =30;
// int DogsAge =9;
// cout<<"Integer Age= "<<Age<<endl;
// cout<<"Integer DogsAge"<<DogsAge<<endl;
// int* pInteger = &Age;
// cout<<"pInteger = 0x"<<pInteger<<endl;
// cout<<"*pInteger = "<<*pInteger<<endl;
// pInteger = &DogsAge;
// cout<<"pInteger points to DogsAge now"<<endl;
// cout<<"pInteger = "<<pInteger<<endl;
// cout<<"*pInteger = "<<*pInteger<<endl;
//}
////8.5
//#include<iostream>
//using namespace std;
//int main()
//{
// int DogsAge = 30;
// cout<<"Initialized DogsAge: "<<DogsAge<<endl;
// int* pAge = &DogsAge;
// *pAge =1;
// cout<<"Input stored using pAge at 0x"<<pAge<<endl;
// cout<<"Integer DogsAge = "<<DogsAge<<endl;
//}
////8.6
//#include<iostream>
//using namespace std;
//int main()
//{
// int Age =30;
// double PI = 3.1416;
// char SayYes = 'y';
// int* pInt = &Age;
// double* pDouble =&PI;
// char* pChar = &SayYes;
// cout<<"sizeof(int)"<<sizeof(int)<<endl;
// cout<<"sizeof(double)"<<sizeof(double)<<endl;
// cout<<"sizeof(char)"<<sizeof(char)<<endl;
// cout<<"sizeof(pInt)"<<sizeof(pInt)<<endl;
// cout<<"sizeof(pDouble)"<<sizeof(pDouble)<<endl;
// cout<<"sizeof(pChar)"<<sizeof(pChar)<<endl;
//}
//8.7
//使用new分配内存,用delete释放他们
//#include<iostream>
//using namespace std;
//int main()
//{
// int* pAge = new int;
// cout<<"Enter you dog's age: "<<endl;
// *pAge =14;
// cout<<"Age "<<*pAge<<" is stored at "<<pAge<<endl;
////不释放内存也行,但是不太好
// // delete pAge;
//}
////8.8
////使用new[]分配内存,使用delete[] 释放他们
//#include<iostream>
//#include<string.h>
//using namespace std;
//int main()
//{
// string Name ="zhengguoxian";
// int CharsToAllocate=Name.length()+1;
// cout<<CharsToAllocate<<endl;
// char* CopyOfName = new char[CharsToAllocate];
// strcpy(CopyOfName,Name.c_str());
// cout<<"Dynamically allocated buffer contains "<<CopyOfName<<endl;
// delete[] CopyOfName;
// return 0;
//}
////8.9
//#include<iostream>
//#include<string.h>
//using namespace std;
//int main()
//{
// cout<<"How many chars you wish to enter?";
// string Name = "zhengguoxian";
// int InputNums = Name.length()+1;
// char* pNumbers = new char [InputNums];
// strcpy(pNumbers,Name.c_str());
// char* pCopy = pNumbers;
// cout<<"Successfully allocated memory for "<<InputNums<<" chars"<<endl;
// for(int Index=0;Index<InputNums;Index++)
// {
// cout<<"Enter number"<<Index<<" : ";
// cout<<*(pNumbers+Index)<<endl;
// }
// for(int Index =0;Index<InputNums;Index++)
// {
//// cout<<*(pCopy++)<<" ";
////*pCopy++ 等同于 *(pCopy++)
// cout<<(*(pCopy++))<<" ";
// }
// cout<<endl;
// delete[] pNumbers;
// return 0;
//}
////8.10
////第一个const 不能修改指针包含的地址的数据
////第二个const 不能修改指针包含的地址
//#include<iostream>
//using namespace std;
//void CalcArea(const double* const pPI,const double* const pRadius, double* const pArea)
//{
// if(pPI&&pRadius&&pArea)
// {
// *pArea = (*pPI)*(*pRadius)*(*pRadius);
// }
//}
//int main()
//{
// const double PI=3.1416;
// double Radius =10;
// double Area;
// CalcArea(&PI,&Radius,&Area);
// cout<<"Area is = "<<Area<<endl;
//}
////8.11
//#include<iostream>
//using namespace std;
//int main()
//{
// int MyNumbers[5];
// int* pNumbers = MyNumbers;
// cout<<"pNumbers = "<<pNumbers<<endl;
// cout<<"&MyNumbers[0] "<<&MyNumbers[0]<<endl;
//}
//
////8.12
////将解除运算符运用于数组
////将数组运算符应用于指针
//#include<iostream>
//using namespace std;
//int main()
//{
// const int ARRAY_LEN = 5;
// int MyNumbers[ARRAY_LEN] ={24,-1,333,111,444};
// int* pNumbers = MyNumbers;
// cout<<"Displaying array using pointer syntax,operator*"<<endl;
// for(int Index = 0;Index<ARRAY_LEN;Index++)
// {
// cout<<"Element "<<Index<<"="<<*(MyNumbers+Index)<<endl;
// }
// cout<<"Displaying array using pointer with array syntax, operator[]"<<endl;
// for(int Index=0;Index<ARRAY_LEN;++Index)
// {
// cout<<"Element "<<Index<<" = "<<pNumbers[Index]<<endl;
// }
//}
////8.13
/// 8.14
////???
//#include<iostream>
//using namespace std;
//int main()
//{
// //bad
// int* pTemperature;
//// pTemperature = new int;
//// *pTemperature =30;
// cout<<"Temperature is "<<*pTemperature;
// delete pTemperature;
// return 0;
//}
////8.15
////异常处理,在new失败时妥善退出
//#include<iostream>
//using namespace std;
//int main()
//{
// try
// {
// int* pAge =new int [1111111111111111];
// delete[] pAge;
// }
// catch(bad_alloc)
// {
// cout<<"Memory allocation failed.Ending program"<<endl;
// }
//}
////8.16
////使用new(nothrow) 我的程序不起作用
//#include<iostream>
//using namespace std;
//int main()
//{
// int* pAge = new(nothrow) int[1111111111111111111111111111111111111111111];
// cout<<pAge;
// if(pAge)
// {
// delete[] pAge;
// }
// else
// {
// cout<<"Memory allocation failed. Ending program"<<endl;
// }
// return 0;
//}
////8.17
////引用是响应变量的别名
//#include<iostream>
//using namespace std;
//int main()
//{
// int Original =30;
// cout<<"Original = "<<Original<<endl;
// cout<<"Original is at address: "<<&Original<<endl;
// //引用,加了&,只是说它是他的别名,其实都是一样的
// int& Ref =Original;
// cout<<"Ref is at address "<<&Ref<<endl;
// int& Ref2= Ref;
// cout<<"Ref2 is at address: "<<&Ref2<<endl;
// cout<<"Ref2 gets value, Ref2 = "<<Ref2<<endl;
//}
////8.18
//#include<iostream>
//using namespace std;
//void ReturnSquare(int& Number)
//{
// Number*=Number;
//};
//int main()
//{
// cout<<"Enter a number you wish to square: "<<endl;
// int Number =10;
// ReturnSquare(Number);
// cout<<"Square is "<<Number<<endl;
// return 0;
//}
////8.19
//#include<iostream>
//using namespace std;
//CalculateSquare(const int& Number, int& Result)
//{
// Result= Number*Number;
//}
//int main()
//{
// cout<<"Enter a number you wish to square: "<<endl;
// int Number =10;
// int Square =10;
// CalculateSquare(Number,Square);
// cout<<"Number"<<Number<<"^2 = "<<Square<<endl;
//}
////8.8.2 -5
//#include<iostream>
//using namespace std;
//int main()
//{
// int* pNumber = new int;
// int* pNumberCopy = pNumber;
// *pNumberCopy = 30;
// cout<<*pNumberCopy;
//// delete pNumberCopy;
// delete pNumber;
//}
////9.1
//#include<iostream>
//#include<string>
//using namespace std;
//class Human
//{
//private:
// string Name;
// int Age;
//public:
// void SetName(string HumansName)
// {
// Name= HumansName;
// }
// void SetAge(int HumansAge)
// {
// Age = HumansAge;
// }
// void IntroduceSelf()
// {
// cout<<"I am "<<Name<<" and am ";
// cout<<Age<<" years old"<<endl;
// }
//};
//int main()
//{
// Human FirstMan;
// FirstMan.SetName("Adam");
// FirstMan.SetAge(30);
// Human FirstWoman;
// FirstWoman.SetName("Eve");
// FirstWoman.SetAge(28);
// FirstMan.IntroduceSelf();
// FirstWoman.IntroduceSelf();
//}
////9.2
//#include<iostream>
//using namespace std;
//class Human
//{
//private:
// int Age;
//public:
// void SetAge(int InputAge)
// {
// Age =InputAge;
// }
// int GetAge()
// {
// if(Age>30)
// return(Age-2);
// else
// return Age;
// }
//};
//int main()
//{
// Human FirstMan;
// FirstMan.SetAge(35);
// Human FirstWoman;
// FirstWoman.SetAge(22);
// cout<<"Age of FirstMan "<<FirstMan.GetAge()<<endl;
// cout<<"Age of FirstWoman "<<FirstWoman.GetAge()<<endl;
//}
////9.3
////使用构造函数初始化成员变量
//#include<iostream>
//#include<string>
//using namespace std;
//class Human
//{
//private:
// string Name;
// int Age;
//public:
// Human()
// {
// Age = 0;
// cout<<"Constructed an instance of class Human"<<endl;
// }
// void SetName(string HumansName)
// {
// Name = HumansName;
// }
// void SetAge(int HumansAge)
// {
// Age = HumansAge;
// }
// void IntroduceSelf()
// {
// cout<<"I am"+Name<<" and am";
// cout<<Age<<"years old"<<endl;
// }
//};
//int main()
//{
// Human FirstMan;
// FirstMan.SetName("Adam");
// FirstMan.SetAge(33);
// Human FirstWomen;
// FirstWomen.SetName("Eve");
// FirstWomen.SetAge(20);
// FirstMan.IntroduceSelf();
// FirstWomen.IntroduceSelf();
//}
////9.4
////包含多个构造函数的类
//#include<iostream>
//#include<string>
//using namespace std;
//class Human
//{
//private:
// string Name;
// int Age;
//public:
// Human()
// {
// Age = 0;
// cout<<"Default constructor creates an instance of Human"<<endl;
// }
// Human(string HumansName)
// {
// Name = HumansName;
// Age = 0;
// cout<<"2222222222222222222222222"<<endl;
// }
// Human(string HumansName, int HumansAge)
// {
// Name = HumansName;
// Age = HumansAge;
// cout<<"333333333333333333333333333"<<endl;
// cout<<Name<<"of"<<Age<<"years"<<endl;
// }
// void SetName(string HumansName)
// {
// Name =HumansName;
// }
// void SetAge(int HumansAge)
// {
// Age = HumansAge;
// }
// void IntroduceSelf()
// {
// cout<<"I am "<<Name<<" and am ";
// cout<<Age<<" years old"<<endl;
// }
//};
//int main()
//{
// Human FirstMan;
// FirstMan.SetName("AAAA");
// FirstMan.SetAge(11);
// Human FirstWomen("EVe");
// FirstWomen.SetAge(111);
// Human FirstChild("aaaaa",12);
// FirstMan.IntroduceSelf();
// FirstWomen.IntroduceSelf();
// FirstChild.IntroduceSelf();
//}
////9.6
///初始化列表来设置成员
//#include<iostream>
//using namespace std;
//class Human
//{
//private:
// int Age;
// string Name;
//public:
// Human(string InputName = "Adam",int InputAge =25):Name(InputNamse),Age(InputAge)
// {
// cout<<"Constructed a Human called "<<Name;
// cout<<" , "<<Age<<" years old"<<endl;
// }
//};
//int main()
//{
// Human FirstMan;
// Human FirstWoman("Eve",18);
//}
////9.8
////浅复制
//#include<iostream>
//#include<string.h>
//using namespace std;
//class MyString
//{
//private:
// char* Buffer;
//public:
// //Constructor
// MyString(const char* InitialInput)
// {
// if (InitialInput != NULL)
// {
// Buffer = new char [strlen(InitialInput)+1];
// strcpy(Buffer,InitialInput);
// }
// else
// {
// Buffer =NULL;
// }
// }
// //Destructor
// ~MyString()
// {
// cout<<"Invoking destructor,clearing up"<<endl;
// if(Buffer != NULL)
// {
// delete [] Buffer;
// }
// }
// int GetLength()
// {
// return strlen(Buffer);
// }
// const char* GetString()
// {
// return Buffer;
// }
//};
//void UseMyString(MyString Input)
//{
// cout<<"String buffer in Mystring is "<<Input.GetLength();
// cout<<"charachers long"<<endl;
// cout<<"Buffer contains: "<<Input.GetString()<<endl;
// return;
//}
//int main()
//{
// //找不到一个类似的,主要是字符串的问题。
// MyString SayHello("Hello from String Class");
// UseMyString(SayHello);
//}
////9.9
////拷贝构造函数
//#include<iostream>
//#include<string.h>
//using namespace std;
//class MyString
//{
//private:
// char* Buffer;
//public:
// //constructor
// MyString(const char* InitialInput)
// {
// cout<<"Constructor: creating new MyString"<<endl;
// if(InitialInput != NULL)
// {
// //动态地分配内存
// Buffer = new char [strlen(InitialInput)+1];
// strcpy(Buffer,InitialInput);
// cout<<"Buffer points to 0x";
// cout<<(unsigned int*)Buffer<<endl;
// }
// else
// {
// Buffer =NULL;
// }
// }
// //copy constructor
// MyString(const MyString& CopySource)
// {
// cout<<"Copy constructor: copying from MyString"<<endl;
// if(CopySource.Buffer != NULL)
// {
// Buffer = new char [strlen(CopySource.Buffer)+1];
// strcpy(Buffer,CopySource.Buffer);
// cout<<"Buffer points to 0x";
// cout<<(unsigned int*)Buffer<<endl;
// }
// else
// {
// Buffer =NULL;
// }
// }
// ~MyString()
// {
// cout<<"Invoking destructor, clearing up"<<endl;
// if(Buffer != NULL )
// {
// delete [] Buffer;
// }
// }
// int GetLength()
// {
// return strlen(Buffer);
// }
// const char* GetString()
// {
// return Buffer;
// }
//};
//void UseMyString(MyString Input)
//{
// cout<<"String buffer in MyString is "<<Input.GetLength();
// cout<<" characters long"<<endl;
// cout<<"Buffer contains "<<Input.GetString()<<endl;
// return;
//}
//int main()
//{
// MyString SayHello("Hello from String Class");
// UseMyString(SayHello);
// return 0;
//}
//////9.10
//#include<iostream>
//#include<string.h>
//using namespace std;
//class President
//{
//private:
// President(){};
// President(const President&);
// const President& operator=(const President&);
// string Name;
//public:
// static President& GetInstance()
// {
// static President OnlyInstance;
// return OnlyInstance;
// }
// string GetName()
// {
// return Name;
// }
// void SetName(string InputName)
// {
// Name =InputName;
// }
//};
//int main()
//{
// President& Only =President::GetInstance();
// Only.SetName("ABraham Lincolin");
//// President Second;//因为构造函数私有 //定义一个对象
//// President* Third =new President();//因为构造函数私有//new 一个对象
//// Only = President::GetInstance();//对现有对象的拷贝,拷贝构造函数设为私有,就不能再main函数中使用
// cout<<"The name of the President is: ";
//// cout<<President::GetInstance().GetName()<<endl;//可以
// cout<<Only.GetName()<<endl;//可以
// return 0;
//}
////9.11
////用new实例化对象,在堆中实例化。为了防止内存泄漏,写了一个静态公有函数
//#include<iostream>
//using namespace std;
//class MonsterDB
//{
//private:
// ~MonsterDB() {};//private destructor
//public:
// static void DestroyInstance(MonsterDB* pInstance)
// {
// delete pInstance;
// }
//};
//int main()
//{
// MonsterDB* pMyDateBase = new MonsterDB();
// MonsterDB::DestroyInstance(pMyDateBase);
// cout<<"aaaaaa"<<endl;
// return 0;
//}
////9.12
//sizeof(类)和sizeof(对象)
//#include<iostream>
//#include<string.h>
//using namespace std;
//class MyString
//{
//private:
// char* Buffer;
//public:
// MyString(const char* InitialInput)
// {
// if(InitialInput != NULL)
// {
// Buffer = new char [strlen(InitialInput)+1];
// strcpy(Buffer,InitialInput);
// }
// else
// {
// Buffer = NULL;
// }
// }
// //拷贝构造函数
// MyString(const MyString& CopySource)
// {
// if(CopySource.Buffer != NULL)
// {
// Buffer = new char [strlen(CopySource.Buffer)+1];
// strcpy(Buffer,CopySource.Buffer);
// }
// else
// {
// Buffer = NULL;
// }
// }
// ~MyString()
// {
// if(Buffer != NULL)
// {
// delete [] Buffer;
// }
// }
// int GetLength()
// {
// return strlen(Buffer);
// }
// const char* GetString()
// {
// return Buffer;
// }
//};
//class Human
//{
//private:
// int Age;
// bool Gender;
// MyString Name;
//public:
// Human(const MyString& InputName, int InputAge, bool InputGender):Name(InputName),Age(InputAge),Gender(InputGender){}
// int GetAge()
// {
// return Age;
// }
//};
//int main()
//{
// MyString FirstMan("Adam");
// MyString FirstWoman("Eve");
// cout<<"sizeof(MyString) = "<<sizeof(MyString)<<endl;
// cout<<"sizeof(FirstMan) = "<<sizeof(FirstMan)<<endl;
// cout<<"sizeof(FirstWoman) = "<<sizeof(FirstWoman)<<endl;
// Human FirstMaleHuman(FirstMan,25,true);
// Human FirstFemaleHuman(FirstWoman,18,false);
// cout<<"sizeof(Human) = "<<sizeof(Human)<<endl;
// cout<<"sizeof(FirstMaleHuman) = "<<sizeof(FirstMaleHuman)<<endl;
// cout<<"sizeof(FirstFemaleHuman) = "<<sizeof(FirstFemaleHuman)<<endl;
// cout<<sizeof(int)+sizeof(bool)+sizeof(MyString)<<endl;
// return 0;
//}
////9.13
////通过友元函数访问私有数据成员
//#include<iostream>
//#include<string.h>
//using namespace std;
//class Human
//{
//private:
// string Name;
// int Age;
// friend void DisplayAge(const Human& Person);
//public:
// Human(string InputName,int InputAge)
// {
// Name = InputName;
// Age = InputAge;
// }
//};
//void DisplayAge(const Human& Person)
//{
// cout<<Person.Age<<endl;
//}
//int main()
//{
// Human FirstMan("Adam",25);
// cout<<"Accessing private member Age via friend"<<endl;
// DisplayAge(FirstMan);
//}
////9.14
//#include<iostream>
//#include<string.h>
//using namespace std;
//class Human
//{
//private:
// string Name;
// int Age;
// friend class Utility;
//public:
// Human(string InputName, int InputAge)
// {
// Name = InputName;
// Age = InputAge;
// }
//};
//class Utility
//{
//public:
// //静态成员
// static void DisplayAge(const Human& Person)
// {
// cout<<Person.Age<<endl;
// }
//};
//int main()
//{
// Human FirstMan("Adam",25);
// cout<<"Accessing private member Age via friend class: ";
// Utility::DisplayAge(FirstMan);
//// FirstMan.Age =1;
// return 0;
//}
////10.1
////两个类,都继承基类
//#include<iostream>
//using namespace std;
//class Fish
//{
//public:
// bool FreshWaterFish;
// void Swim()
// {
// if(FreshWaterFish)
// cout<<"Swims in lake"<<endl;
// else
// cout<<"Swims in sea"<<endl;
// }
//};
//class Tuna: public Fish
//{
//public:
// Tuna()
// {
// FreshWaterFish =false;
// }
//};
//class Carp: public Fish
//{
//public:
// Carp()
// {
// FreshWaterFish = true;
// }
//};
//int main()
//{
// Carp myLunch;
// Tuna myDinner;
// cout<<"Getting my food to swim"<<endl;
// cout<<"Lunch";
// myLunch.Swim();
// cout<<"Dinner";
// myDinner.Swim();
//}
////10.2
////protected main函数中不能使用他
////
//#include<iostream>
//using namespace std;
//class Fish
//{
//protected:
// bool FreshWaterFish;
//public:
// void Swim()
// {
// if(FreshWaterFish)
// cout<<"Swims in lake "<<endl;
// else
// cout<<"Swins in sea "<<endl;
// }
//};
//class Tuna: public Fish
//{
//public:
// Tuna()
// {
// FreshWaterFish = false;
// }
//};
//class Carp: public Fish
//{
//public:
// Carp()
// {
// FreshWaterFish =false;
// }
//};
//int main()
//{
// Carp myLunch;
// Tuna myDinner;
// cout<<"AAAAAAAAAAAAAAA"<<endl;
// cout<<"Lunch ";
// myLunch.Swim();
// cout<<"Dinner ";
// myDinner.Swim();
//// myLunch.FreshWaterFish = false;//
// return 0;
//}
////10.3
////派生类构造函数带上初始化列表
//#include<iostream>
//using namespace std;
//class Fish
//{
//protected:
// bool FreshWaterFish;
//public:
// Fish(bool IsFreshWater): FreshWaterFish(IsFreshWater){}
// void Swim()
// {
// if(FreshWaterFish)
// cout<<"Swims in lake"<<endl;
// else
// cout<<"Swims in sea"<<endl;
// }
//};
//class Tuna: public Fish
//{
//public:
// Tuna():Fish(false) {}
//};
//class Carp: public Fish
//{
//public:
// Carp():Fish(true) {}
//};
//int main()
//{
// Carp myLunch;
// Tuna myDinner;
// cout<<"Getting my food to swim"<<endl;
// cout<<"Lunch: ";
// myLunch.Swim();
// cout<<"Dinner: ";
// myDinner.Swim();
// return 0;
//}
////10.4
////在派生类中实现的方法,就不会去执行基类中的方法
//#include<iostream>
//using namespace std;
//class Fish
//{
//private:
// bool FreshWaterFish;
//public:
// Fish(bool IsFreshWater): FreshWaterFish(IsFreshWater) {}
// void Swim()
// {
// if(FreshWaterFish)
// cout<<"Swims in lake"<<endl;
// else
// cout<<"Swims in sea"<<endl;
// }
//};
//class Tuna: public Fish
//{
//public:
// Tuna():Fish(false) {}
// void Swim()
// {
// cout<<"AAAAAAAAAAAAAA"<<endl;
// }
//};
//class Carp: public Fish
//{
//public:
// Carp(): Fish(true) {}
// void Swim()
// {
// cout<<"BBBBBBBBBBBBBBBBBB"<<endl;
// }
//};
//int main()
//{
// Carp myLunch;
// Tuna myDinner;
// cout<<"CCCCCCCCCCCCCC"<<endl;
// cout<<"Lunch";
// myLunch.Swim();
// cout<<"Dinner";
// myDinner.Swim();
//}
////10.5
//::作用域解析运算符
//#include<iostream>
//using namespace std;
//class Fish
//{
//private:
// bool FreshWaterFish;
//public:
// Fish(bool IsFreshWater):FreshWaterFish(IsFreshWater) {}
// void Swim()
// {
// if(FreshWaterFish)
// cout<<"Swims in lake"<<endl;
// else
// cout<<"Swims in sea"<<endl;
// }
//};
//class Tuna:public Fish
//{
//public:
// Tuna(): Fish(false) {}
// void Swim()
// {
// cout<<"Tuna swims real fast"<<endl;
// }
//};
//class Carp: public Fish
//{
//public:
// Carp():Fish(true) {}
// void Swim()
// {
// cout<<"Carp swims real fast"<<endl;
// Fish::Swim();//调用的是基类的方法
// }
//};
//int main()
//{
// Carp myLunch;
// Tuna myDinner;
// cout<<"AAAAAAAAAAAA"<<endl;
// cout<<"Lunch: ";
// myLunch.Swim();
//// cout<<"Dinner: ";
//// myDinner.Fish::Swim();//调用的是基类的方法
//// myDinner.Swim();//调用的是子类的方法
//}
////10.6
//#include<iostream>
//using namespace std;
//class Fish
//{
//public:
// void Swim()
// {
// cout<<"Fish swims ...!"<<endl;
// }
// void Swim(bool FreshWaterFish)
// {
// if(FreshWaterFish)
// cout<<"swims in lake"<<endl;
// else
// cout<<"swins in sea"<<endl;
// }
//};
//class Tuna:public Fish
//{
//public:
// using Fish::Swim;
// void Swim()
// {
// cout<<"Tuna swims real fast"<<endl;
// }
//};
//int main()
//{
// Tuna myDinner;
//// cout<<"Getting my food "<<endl;
//// myDinner.Swim();//调用派生类
//// myDinner.Fish::Swim();//调用基类的方法
//// myDinner.Fish::Swim(true);//调用基类的方法
// myDinner.Swim(true);// 在派生类中加上using Fish::Swim;
//}
////10.7
////构造函数和析构函数的执行顺序
//#include<iostream>
//using namespace std;
//class FishDummyMember
//{
//public:
// FishDummyMember()
// {
// cout<<"FishDummyMember constructor"<<endl;
// }
// ~FishDummyMember()
// {
// cout<<"FishDummyMember destructor"<<endl;
// }
//};
//class Fish
//{
//protected:
// FishDummyMember dummy;
//public:
// Fish()
// {
// cout<<"Fish constrictor"<<endl;
// }
// ~Fish()
// {
// cout<<"Fish destructor"<<endl;
// }
//};
//class TunaDummyMember
//{
//public:
// TunaDummyMember()
// {
// cout<<"TunaDummyMember constructor"<<endl;
// }
// ~TunaDummyMember()
// {
// cout<<"TunaDummyMember constructor"<<endl;
// }
//};
//class Tuna: public Fish
//{
//private:
// TunaDummyMember dummy;
//public:
// Tuna()
// {
// cout<<"Tuna constructor"<<endl;
// }
// ~Tuna()
// {
// cout<<"Tuna destructor"<<endl;
// }
//};
//int main()
//{
// Tuna myDinner;
//}
//#include<iostream>
//using namespace std;
//class Motor
//{
//public:
// void SwitchIgnition()
// {
// cout<<"Ignition ON"<<endl;
// }
// void PumpFuel()
// {
// cout<<"Fuel in cylinders"<<endl;
// }
// void FireCylinders()
// {
// cout<<"Vroooom"<<endl;
// }
//};
//class Car:private Motor
//{
//public:
// void Move()
// {
// SwitchIgnition();
// PumpFuel();
// FireCylinders();
// }
//};
//int main()
//{
// Car myDreamCar;
// myDreamCar.Move();
//// myDreamCar.SwitchIgnition();
// return 0;
//}
////10.9
//#include<iostream>
//using namespace std;
//class Motor
//{
//public:
// void SwitchIgnition()
// {
// cout<<"Ignition ON"<<endl;
// }
// void PumpFuel()
// {
// cout<<"Fuel in cylinders"<<endl;
// }
// void FireCylinders()
// {
// cout<<"Vroooom"<<endl;
// }
//};
//class Car:protected Motor
//{
//public:
// void Move()
// {
// SwitchIgnition();
// PumpFuel();
// FireCylinders();
// }
//};
//class SuperCar: Car
//{
//public:
// void Move()
// {
// SwitchIgnition();
// PumpFuel();
// FireCylinders();
// FireCylinders();
// FireCylinders();
// }
//};
//int main()
//{
// SuperCar myDreamCar;
// myDreamCar.Move();
//}
////10.8.2 -1
////调用构造函数顺序:依次调用基类的构造函数,在调用派生类的构造函数
//#include<iostream>
//using namespace std;
//class Mammal
//{
//public:
// Mammal()
// {
// cout<<"Mammal constructor"<<endl;
// }
//};
//class Reptile
//{
//public:
// Reptile()
// {
// cout<<"Reptile constructor"<<endl;
// }
//};
//class Bird
//{
//public:
// Bird()
// {
// cout<<"Bird constructor"<<endl;
// }
//};
//class Platypus: public Mammal,public Bird, public Reptile
//{
//public:
// Platypus()
// {
// cout<<"Platypus constructor"<<endl;
// }
//};
//int main()
//{
// Platypus real;
//}
////11.1
//#include<iostream>
//using namespace std;
//class Fish
//{
//public:
// void Swim()
// {
// cout<<"Fish swims"<<endl;
// }
//};
//class Tuna: public Fish
//{
//public:
// //覆盖了基类Swim()方法
// void Swim()
// {
// cout<<"Tuna swims"<<endl;
// }
//};
//void MakeFishSwim(Fish& InputFish)
//{
// InputFish.Swim();
//}
//int main()
//{
// Tuna myDinner;
// myDinner.Swim();
// MakeFishSwim(myDinner);
//}
////11.2
/// 虚函数
#include<iostream>
using namespace std;
class Fish
{
public:
virtual void Swim()
{
cout<<"Fish swims"<<endl;
}
};
class Tuna:public Fish
{
public:
void Swim()
{
cout<<"Tuna swims"<<endl;
}
};
class Carp:public Fish
{
public:
virtual void Swim() override
{
cout<<"Carp swims"<<endl;
}
};
void MakeFishSwim(Fish& InputFish)
{
InputFish.Swim();
}
int main()
{
Tuna myDinner;
Carp myLunch;
// MakeFishSwim(myDinner);
// MakeFishSwim(myLunch);
// myDinner.Swim();
// myLunch.Swim();
return 0;
}
////11.3
////在堆中实例化对象,如果将其赋值给基类的指针,该指针调用delete,
////将不会调用派生类的析构函数,这会导致资源未释放,内存泄漏的问题
//#include<iostream>
//using namespace std;
//class Fish
//{
//public:
// Fish()
// {
// cout<<"Fish constructor"<<endl;
// }
// ~Fish()
// {
// cout<<"Fish destructor"<<endl;
// }
//};
//class Tuna: public Fish
//{
//public:
// Tuna()
// {
// cout<<"Tuna constructor"<<endl;
// }
// ~Tuna()
// {
// cout<<"Tuna destructor"<<endl;
// }
//};
//void DeleteFishMemory(Fish* pFish)
//{
// delete pFish;
//}
//int main()
//{
// cout<<"Allocating a Tuna in the free store"<<endl;
// Tuna* pTuna = new Tuna;//在堆中实例化对象
// cout<<"Delete the Tuna:"<<endl;
// DeleteFishMemory(pTuna);//???
// cout<<"AAAAAAAAAAAAAA"<<endl;
// Tuna myDinner;
// return 0;
//}
////11.4
////在堆中实例化对象,如果将其赋值给基类的指针,该指针调用delete,
////将不会调用派生类的析构函数,这会导致资源未释放,内存泄漏的问题
//#include<iostream>
//using namespace std;
//class Fish
//{
//public:
// Fish()
// {
// cout<<"Fish constructor"<<endl;
// }
// virtual ~Fish()//确保neic 不泄漏
// {
// cout<<"Fish destructor"<<endl;
// }
//};
//class Tuna: public Fish
//{
//public:
// Tuna()
// {
// cout<<"Tuna constructor"<<endl;
// }
// ~Tuna()
// {
// cout<<"Tuna destructor"<<endl;
// }
//};
//void DeleteFishMemory(Fish* pFish)
//{
// delete pFish;
//}
//int main()
//{
// cout<<"Allocating a Tuna in the free store"<<endl;
// Tuna* pTuna = new Tuna;//在堆中实例化对象
// cout<<"Delete the Tuna:"<<endl;
// DeleteFishMemory(pTuna);//???
// cout<<"AAAAAAAAAAAAAA"<<endl;
// Tuna myDinner;
// return 0;
//}
////11.6
//#include<iostream>
//using namespace std;
//class Fish
//{
//public:
// virtual void Swim()=0; //纯虚函数
//};
//class Tuna:public Fish
//{
//public:
// void Swim()
// {
// cout<<"Tuna swims fast in the sea"<<endl;
// }
//};
//class Carp:public Fish
//{
// void Swim()
// {
// cout<<"Carp swims slow in the lake"<<endl;
// }
//};
//void MakeFishSwim(Fish& inputFish)
//{
// inputFish.Swim();
//}
//int main()
//{
// Fish myFish;
// Carp myLunch;
// Tuna myDinner;
// MakeFishSwim(myLunch);
// MakeFishSwim(myDinner);
// return 0;
//}
////11.7
//#include<iostream>
//using namespace std;
//class Animal
//{
//public:
// Animal()
// {
// cout<<"Animal constructor"<<endl;
// }
// int Age;
//};
//class Mammal:public Animal
//{
//};
//class Bird:public Animal
//{
//};
//class Reptile:public Animal
//{
//};
//class Platypus:public Mammal,public Bird,public Reptile
//{
//public:
// Platypus()
// {
// cout<<"Platypus constructor"<<endl;
// }
//};
//int main()
//{
// Platypus duckBilledP;
//// duckBilledP.Age = 2;//和之前学的矛盾啊?????
//// duckBilledP.Mammal::Animal::Age = 25;//不行
//// duckBilledP.Bird::Animal::Age = 25;
//// duckBilledP.Reptile::Animal::Age = 25;
//}
////11.7
//#include<iostream>
//using namespace std;
//class Animal
//{
//public:
// Animal()
// {
// cout<<"Animal constructor"<<endl;
// }
// int Age;
//};
//class Mammal:public virtual Animal
//{
//};
//class Bird:public virtual Animal
//{
//};
//class Reptile:public virtual Animal
//{
//};
//class Platypus:public Mammal,public Bird,public Reptile
//{
//public:
// Platypus()
// {
// cout<<"Platypus constructor"<<endl;
// }
//};
//int main()
//{
// Platypus duckBilledP;
// duckBilledP.Age = 2;//和之前学的矛盾啊?????
//// duckBilledP.Mammal::Animal::Age = 25;//不行
//// duckBilledP.Bird::Animal::Age = 25;
//// duckBilledP.Reptile::Animal::Age = 25;
//}
////11.6.1--1
//#include<iostream>
//using namespace std;
//class Shape
//{
//public:
// virtual double Area() =0;//纯虚函数,使基类变成抽象基类
// virtual void Print() =0;
//};
//class Circle:public Shape
//{
// double Radius;
//public:
// Circle(double inputRadius) :Radius(inputRadius) {}
// double Area()
// {
// return 3.1416*Radius*Radius;
// }
// void Print()
// {
// cout<<"Circle says hello"<<endl;
// }
//};
//class Triangle:public Shape
//{
// double Base,Height;
//public:
// //构造函数
// Triangle(double inputBase,double inputHeight): Base(inputBase),Height(inputHeight) {}
// double Area()
// {
// return 0.5*Base*Height;
// }
// void Print()
// {
// cout<<"Triangle says hello"<<endl;
// }
//};
//int main()
//{
// Circle myRing(5);
// Triangle myTriangle(1,2);
// cout<<"Area of Circle :"<<myRing.Area()<<endl;
// cout<<"Area of Triangle: "<<myTriangle.Area()<<endl;
// myRing.Print();
// myTriangle.Print();
//}
////12.1
////单目递增与单目递减云算符
//#include<iostream>
//using namespace std;
//class Date
//{
//private:
// int Day;
// int Month;
// int Year;
//public:
// Date(int InputDay,int InputMonth, int InputYear):Day(InputDay),Month(InputMonth),Year(InputYear) {};
// //???
// Date& operator ++ ()
// {
// ++Day;
// return *this;
// }
// Date& operator -- ()
// {
// --Day;
// return *this;
// }
// void DisplayDate()
// {
// cout<<Day<<" / "<<Month<<" / "<<Year<<endl;
// }
//};
//int main()
//{
// Date Holiday(31,12,2011);
// cout<<"The date object is initialized to: ";
// Holiday.DisplayDate();
// //???
// ++Holiday;
// cout<<"AAAAAAAAAAAAAA"<<endl;
// Holiday.DisplayDate();
// --Holiday;
// --Holiday;
// cout<<"BBBBBBBBBBBB"<<endl;
// Holiday.DisplayDate();
//// cout<<Holiday;
// return 0;
//}
////12.2
////单目递增与单目递减云算符
//#include<iostream>
//#include<sstream>
//#include<string.h>
//using namespace std;
//class Date
//{
//private:
// int Day;
// int Month;
// int Year;
// string DateInString;
//public:
// Date(int InputDay,int InputMonth, int InputYear):Day(InputDay),Month(InputMonth),Year(InputYear) {};
// operator const char*()
// {
// ostringstream formattedDate;
// formattedDate<<Day<<"/"<<Month<<"/"<<Year;
// DateInString = formattedDate.str();
// return DateInString.c_str();
// }
//};
//int main()
//{
// Date Holiday(31,12,2011);
//// cout<<Holiday;
// string strHoliday(Holiday);
// cout<<strHoliday;
//}
//12.3
//#include<iostream>
//#include<memory>
//using namespace std;
//class Date
//{
//private:
// int Day;
// int Month;
// int Year;
// string DateInString;
//public:
// Date(int InputDay,int InputMonth,int InputYear):Day(InputDay),Month(InputMonth),Year(InputYear) {};
// void DisplayDate()
// {
// cout<<Day<<"/"<<Month<<"/"<<Year<<endl;
// }
//};
//int main()
//{
// //智能指针类unique_ptr,
// unique_ptr<int> pDynamicAllocInteger(new int);
// //?? *(地址) = 值 &(变量) = 地址 有啥区别
// *pDynamicAllocInteger =42;
// cout<<"Integer value is "<<*pDynamicAllocInteger<<endl;
// unique_ptr<Date> pHoliday(new Date(25,11,2011));
// cout<<"The new instance of date contains: ";
// pHoliday->DisplayDate();
// int Age =30;
// //
// int* pInteger = &Age;
// cout<<*pInteger<<endl;
// return 0;
//}
////12.4
////怎么看是智能指针呢!!!
//#include<iostream>
//using namespace std;
////???类似函数重载的功能 函数模板
//template <typename T>
//class smart_pointer
//{
//private:
// T* m_pRawPointer;
//public:
// smart_pointer(T* pData):m_pRawPointer(pData) {};
// ~smart_pointer(){delete m_pRawPointer;}
// //???
// T& operator*() const
// {
// return *(m_pRawPointer);
// }
// //??? 一用这个->符号,我就调用这个函数吗 那是固定的格式吗
// T* operator-> () const
// {
// return m_pRawPointer;
// }
//};
//class Date
//{
//private:
// int Day,Month,Year;
// string DateString;
//public:
// Date(int InputDay,int InputMonth, int InputYear): Day(InputDay),Month(InputMonth),Year(InputYear) {};
// void DisplayDate()
// {
// cout<<Day<<" / "<<Month<<" / "<<Year<<endl;
// }
//};
//int main()
//{
// //加了一个模板就不知道
// smart_pointer<int> pDynamicInt(new int(43));
// cout<<"BBBB"<<*pDynamicInt<<endl;
// //smartpointer 也是类,Date也是类???//模板类什么回事
// //原本应该是Date pDate(new Date(25,12,2011));加了一个smart_pointer是啥玩意呢?
// smart_pointer<Date> pDate(new Date(25,12,2011));
// cout<<"AAAA";
// pDate->DisplayDate();
// //这是一种
//// Date pDate(25,12,2011);
//// pDate.DisplayDate();
//// //第二种
//// Date* pDate(new Date(25,12,2011));
//// (*pDate).DisplayDate();
//// pDate->DisplayDate();//这个也行
//// int* pDynamicInt(new int(43));
//// cout<<"DDDD"<<*pDynamicInt<<endl;
//}
////12.5来
//#include<iostream>
//using namespace std;
//class Date
//{
//private:
// int Day, Month, Year;
//public:
// Date(int InputDay,int InputMonth, int InputYear):Day(InputDay),Month(InputMonth),Year(InputYear) {};
// Date operator+ (int DaysToAdd)
// {
// //???
// Date newDate (Day+DaysToAdd,Month,Year);
// return newDate;
// }
// Date operator- (int DaysToSub)
// {
// //???两个的表达的功能是一样的
//// return Date(Day-DaysToSub,Month,Year);
// Date newDate1 (Day-DaysToSub,Month,Year);
// return newDate1;
// }
// void DisplayDate()
// {
// cout<<Day<<" / "<<Month<<" / "<<"Year"<<endl;
// }
//};
//int main()
//{
// Date Holiday(25,12,2011);
// cout<<"Holiday on: ";
// Holiday.DisplayDate();
// Holiday.DisplayDate();
// //怎么执行法,先运行完运算符,再实例化对象
// Date PreviousHoliday(Holiday -19);
// cout<<"Previous holiday on: ";
// PreviousHoliday.DisplayDate();
// //Day的值应该变了啊 对对象而言的,不同的对象有不同的值
// //
// Date NextHoliday(Holiday +6);
// cout<<"Next holiday on: ";
// NextHoliday.DisplayDate();
//}
//12.6
//#include<iostream>
//using namespace std;
//class Date
//{
//private:
// int Day,Month,Year;
//public:
// Date(int InputDay,int InputMonth,int InputYear):Day(InputDay),Month(InputMonth),Year(InputYear) {};
// void operator += (int DaysToAdd)
// {
// Day+=DaysToAdd;
// }
// void operator -= (int DaysToSub)
// {
// Day-=DaysToSub;
// }
// void DisplayDate()
// {
// cout<<Day<<" / "<<Month<<" / "<<Year<<endl;
// }
//};
//int main()
//{
// Date Holiday(25,12,2011);
// cout<<"Holiday: ";
// Holiday.DisplayDate();
// Holiday-=19;
// Holiday.DisplayDate();
// cout<<"----------------------"<<endl;
// Holiday+=25;
// Holiday.DisplayDate();
//}
////12.7
//#include<iostream>
//using namespace std;
//class Date
//{
//private:
// int Day,Month,Year;
//public:
// Date(int InputDay,int InputMonth, int InputYear): Day(InputDay),Month(InputMonth),Year(InputYear) {};
// //???
// bool operator == (const Date& compareTo)
// {
// return((Day == compareTo.Day)&&(Month == compareTo.Month)&&(Year==compareTo.Year));
// }
// //???
// bool operator != (const Date& compareTo)
// {
// return!(this->operator==(compareTo));
// }
// void DisplayDate()
// {
// cout<<Day<<" / "<<Month<<" / "<<Year<<endl;
// }
//};
//int main()
//{
// Date Holiday1(25,12,2011);
// Date Holiday2(31,12,2011);
// cout<<"Holiday 1 is ";
// Holiday1.DisplayDate();
// cout<<"--------------"<<endl;
// cout<<"Holiday 2 is ";
// Holiday2.DisplayDate();
// if(Holiday1 == Holiday2)
// cout<<"Holiday1 == Holiday2"<<endl;
// else
// cout<<"Holiday1 != Holiday2"<<endl;
// cout<<"========================="<<endl;
// if(Holiday1 != Holiday2)
// cout<<"Holiday1 != Holiday2"<<endl;
// else
// cout<<"Holiday1 == Holiday2"<<endl;
//}
//12.9
//#include<iostream>
//using namespace std;
//class Date
//{
//private:
// int Day,Month,Year;
//public:
// Date(int InputDay,int InputMonth,int InputYear): Day(InputDay),Month(InputMonth),Year(InputYear) {};
// bool operator == (const Date& compareTo)
// {
// return ((Day == compareTo.Day)&&(Month==compareTo.Month)&&(Year==compareTo.Year));
// }
// bool operator < (const Date& compareTo)
// {
// if(Year <compareTo.Year)
// return true;
// else if(Month<compareTo.Month)
// return true;
// else if(Day<compareTo.Day)
// return true;
// else
// return false;
// }
// bool operator <= (const Date& compareTo)
// {
// if(this->operator == (compareTo))
// return true;
// else
// return this->operator < (compareTo);
// }
// bool operator > (const Date& compareTo)
// {
// return !(this->operator <= (compareTo));
// }
// bool operator >=(const Date& compareTo)
// {
// if(this->operator == (compareTo))
// return true;
// else
// return this->operator > (compareTo);
// }
// bool operator !=(const Date& compareTo)
// {
// return !(this->operator == (compareTo));
// }
// void DisplayDate()
// {
// cout<<Day<<" / "<<Month<<" / "<<Year<<endl;
// }
//};
//int main()
//{
// Date Holiday1(20,12,2011);
// Date Holiday2(21,12,2011);
// if(Holiday1<Holiday2)
// cout<<"Holiday1<Holiday2"<<endl;
// if(Holiday1<=Holiday2)
// cout<<"Holiday1<=Holiday2"<<endl;
// if(Holiday1>Holiday2)
// cout<<"Holiday1>Holiday2"<<endl;
// if(Holiday1>=Holiday2)
// cout<<"Holiday1>=Holiday2"<<endl;
//}
////12.9
//#include<iostream>
//#include<string.h>
//using namespace std;
//class MyString
//{
//private:
// char* Buffer;
//public:
// MyString(const char* InitialInput)
// {
// if(InitialInput != NULL)
// {
// Buffer = new char [strlen(InitialInput)+1];
// strcpy(Buffer,InitialInput);
// }
// else
// {
// Buffer =NULL;
// }
// }
// //拷贝构造函数
// MyString(const MyString& CopySource);
// //复制赋值运算符
// //this 当前对象的地址
// //当前对象是???
// MyString& operator = (const MyString& CopySource)
// {
// if((this != &CopySource)&&(CopySource.Buffer != NULL))
// {
// if(Buffer !=NULL)
// delete [] Buffer;
// Buffer = new char [strlen(CopySource.Buffer)+1];
// strcpy(Buffer,CopySource.Buffer);
// }
// return *this;
// }
// ~MyString()
// {
// if(Buffer != Buffer)
// delete [] Buffer;
// }
// int GetLength()
// {
// return strlen(Buffer);
// }
// //目的:让cout显示类的对象
// operator const char*()
// {
// return Buffer;
// }
//};
//int main()
//{
// MyString String1("Hello");
// MyString String2("World");
// cout<<"Before assignment: "<<endl;
// cout<<String1<< String2<<endl;
// String2 =String1;
// cout<<"After assignment String2 = String1: "<<endl;
// cout<<String1<< String2<<endl;
// return 0;
//}
//12.11
//#include<iostream>
//#include<string.h>
//using namespace std;
//class MyString
//{
//private:
// char* Buffer;
// //private default constructor
//// MyString(){}//可以不写
//public:
// //constructor
// MyString(const char* InitialInput)
// {
// if(InitialInput != NULL)
// {
// //为什么要加1呢
// Buffer = new char [strlen(InitialInput)+1];
// strcpy(Buffer,InitialInput);
// }
// else
// Buffer = NULL;
// }
// //copy constructor
// MyString(const MyString& CopySource);
// //copy assignment operator
// MyString& operator=(const MyString& CopySource);
// //下标运算符 两个const啥意思呢 后一个const 禁止修改了类的成员属性
// const char& operator[] (int Index) const
// {
// if(Index <GetLength())
// return Buffer[Index];
// }
// ~MyString()
// {
// if(Buffer != NULL)
// delete [] Buffer;
// }
// // const是干啥的 禁止修改成员属性c
// int GetLength() const
// {
// return strlen(Buffer);
// }
// //目的是cout输出类的对象
// operator const char* ()
// {
// return Buffer;
// }
//};
//int main()
//{
// cout<<"Type a statement: ";
// string strInput = "ABCDEFG";
// MyString youSaid(strInput.c_str());
// cout<<"BBBBBBB"<<endl;
// for(int Index = 0;Index<youSaid.GetLength();++Index)
// cout<<youSaid[Index]<<" ";
// cout<<endl;
// cout<<"enter index 0 dao 6"<<endl;
// int Index =6;
// cout<<youSaid[Index]<<endl;
//}
//12.11
//#include<iostream>
//#include<string.h>
//using namespace std;
//class CDisplay
//{
//public:
// void operator () (string Input) const
// {
// cout<<Input<<endl;
// }
//};
//int main()
//{
// CDisplay mDisplayFuncObject;
// mDisplayFuncObject("Display this string!");
// return 0;
//}
////12.12
//#include<iostream>
//#include<string.h>
//using namespace std;
//class MyString
//{
//private:
// char* Buffer;
// //private default constructor
// //为啥要变为私有呢???
// //我认为无所谓
//public:
// MyString(): Buffer(NULL)
// {
// cout<<"Default constructor called"<<endl;
// }
// //destructor
// ~MyString()
// {
// if(Buffer != NULL)
// delete [] Buffer;
// }
// int GetLength()
// {
// return strlen(Buffer);
// }
// //用于cout输出类的对象
// operator const char*()
// {
// return Buffer;
// }
// //双目运算符
// MyString operator+ (const MyString& AddThis)
// {
// cout<<"operator+ called"<<endl;
// MyString NewString;
// if(AddThis.Buffer != NULL)
// {
// //两个对象相加
// NewString.Buffer =new char[GetLength()+strlen(AddThis.Buffer)+1];
// strcpy(NewString.Buffer,Buffer);
// strcat(NewString.Buffer,AddThis.Buffer);
// }
// return NewString;
// }
// //constructor
// MyString(const char* InitialInput)
// {
// cout<<"Constructor called for: "<<InitialInput<<endl;
// if(InitialInput !=NULL)
// {
// Buffer = new char [strlen(InitialInput)+1];
// strcpy(Buffer,InitialInput);
// }
// else
// Buffer =NULL;
// }
// //copy constructor
// MyString(const MyString& CopySource)
// {
// cout<<"Copy constructor to copy from: "<<CopySource.Buffer<<endl;
// if(CopySource.Buffer !=NULL)
// {
// Buffer = new char [strlen(CopySource.Buffer)+1];
// strcpy(Buffer,CopySource.Buffer);
// }
// else
// Buffer =NULL;
// }
// //拷贝赋值运算符
// MyString& operator= (const MyString& CopySource)
// {
// cout<<"Copy assignment operator to copy from: "<<CopySource.Buffer<<endl;
// if((this != &CopySource)&& (CopySource.Buffer != NULL))
// {
// if(Buffer != NULL)
// delete [] Buffer;
// Buffer = new char [strlen(CopySource.Buffer)+1];
// strcpy(Buffer,CopySource.Buffer);
// }
// return *this;
// }
// //移动构造函数 有了这个,复制构造函数就不会调用了
// MyString(MyString&& MoveSource)
// {
// cout<<"Move constructor to move from"<<MoveSource.Buffer<<endl;
// if(MoveSource.Buffer != NULL)
// {
// Buffer = MoveSource.Buffer;
// MoveSource.Buffer =NULL;
// }
// }
// //移动赋值构造函数 有了这个,复制赋值构造函数就不会调用了
// //this 是啥呢 当前对象的地址
// //返回的是*this 那就是 sayHelloAgain ,这个就是构造函数
// MyString& operator= (MyString&& MoveSource)
// {
// cout<<"Move assignment operator to move from: "<<MoveSource.Buffer<<endl;
// if((MoveSource.Buffer != NULL)&&(this != &MoveSource))
// {
// delete Buffer;
// Buffer = MoveSource.Buffer;
// MoveSource.Buffer = NULL;
// }
// return *this;
// }
//};
//int main()
//{
// MyString Hello("Hello ");
// MyString World("World");
// MyString CPP(" of C++");
// MyString sayHelloAgain("overwrite this");
//// Hello + World + CPP;
//// cout<<"==========="<<endl;
// sayHelloAgain = Hello+World+ CPP;
// cout<<sayHelloAgain<<endl;
// return 0;
//}
////13.1
////类型转换运算符 因为两种类型不同,所以需要转换
////
//#include<iostream>
//using namespace std;
//class Fish
//{
//public:
// //虚函数 例子11.2
// virtual void Swim()
// {
// cout<<"Fish swims in water"<<endl;
// }
// //虚析构函数 例子11.4
// virtual ~Fish(){}
//};
//class Tuna: public Fish
//{
//public:
// void Swim()
// {
// cout<<"Tuna swims real fast in the sea"<<endl;
// }
// void BecomeDinner()
// {
// cout<<"Tuna became dinner in Sushi"<<endl;
// }
//};
//class Carp:public Fish
//{
//public:
// void Swim()
// {
// cout<<"Carp swims real slow in the lake"<<endl;
// }
// void Talk()
// {
// cout<<"Carp talked carp"<<endl;
// }
//};
//void DetectFishType(Fish* InputFish)
//{
// Tuna* pIsTuna = dynamic_cast<Tuna*>(InputFish);
// cout<<"pIsTuna"<<pIsTuna<<endl;
// if(pIsTuna)
// {
// cout<<"pIsTuna :"<<pIsTuna<<endl;
// cout<<"Detected Tuna. Make Tuna dinner: "<<endl;
// pIsTuna->BecomeDinner();
// }
// Carp* pIsCarp = dynamic_cast<Carp*>(InputFish);
// cout<<"pIsCarp"<<pIsCarp<<endl;
// if(pIsCarp)
// {
// cout<<"pIsCarp :"<<pIsCarp<<endl;
// cout<<"Detected Carp. Making carp talk:"<<endl;
// pIsCarp->Talk();
// }
// cout<<"Verifying type using virtual Fish::Swim: "<<endl;
// InputFish->Swim();
//}
//int main()
//{
// Carp myLunch;
// Tuna myDinner;
// DetectFishType(&myDinner);
// cout<<endl;
// DetectFishType(&myLunch);
//// char* pszString ="Hello World";
//// int* pBuf = pszString;
// return 0;
//}
//14.1
//#include<iostream>
//#include<string.h>
//using namespace std;
//#define ARRAY_LENGTH 25
//#define PI 3.1416
//#define MY_DOUBLE double
//#define FAV_WHISKY "Jack Daniels"
//int main()
//{
// int MyNumbers[ARRAY_LENGTH] ={0,1,2,2};
// cout<<"Array's length: "<<sizeof(MyNumbers)/sizeof(int)<<endl;
// cout<<"MyNumbers[5]"<<MyNumbers[20]<<endl;
// cout<<"Enter a radius:";
// MY_DOUBLE Radius =10;
// cout<<"Area is : "<<PI*Radius*Radius<<endl;
// string FavoriteWhisky(FAV_WHISKY);
// cout<<"My favorite drink is: "<<FavoriteWhisky<<endl;
// return 0;
//}
//14.2
//#include<iostream>
//#include<string.h>
//using namespace std;
//#define SQUARE(x) ((x)*(x))
//#define PI 3.1416
//#define AREA_CIRCLE(r) (PI*(r)*(r))
//#define MAX(a,b) (((a)>(b))?(a):(b))
//#define MIN(a,b) (((a)<(b))?(a):(b))
//int main()
//{
//// cout<<"Enter a integer: "<<endl;
// int Input1 = 12;
//// cout<<SQUARE(Input1)<<endl;
//// cout<<AREA_CIRCLE(Input1)<<endl;
// int Input2 =143;
// cout<<MAX(Input1,Input2)<<endl;
// cout<<MIN(Input1,Input2)<<endl;
//}
//14.3
//#include<iostream>
//#include<string.h>
//using namespace std;
//template <typename Type>
//const Type& GetMax(const Type& value1, const Type& value2)
//{
// if(value1 > value2 )
// return value1;
// else
// return value2;
//}
//template <typename Type>
//void DisplayComparision(const Type& value1, const Type& value2)
//{
// cout<<GetMax(value1,value2)<<endl;
//}
//int main()
//{
// int Int1 = -101,Int2 = 2011;
// DisplayComparision(Int1,Int2);
// double Double1 = -101.111,Double2 = 2011.111;
// DisplayComparision(Double1,Double2);
//}
//14.4
//模板类
//#include<iostream>
//using namespace std;
//template <typename T1=int,typename T2=double>
//class HoldsPair
//{
//private:
// T1 Value1;
// T2 Value2;
//public:
// HoldsPair(const T1& value1,const T2& value2)
// {
// Value1 = value1;
// Value2 = value2;
// }
// const T1& GetFirstValue() const
// {
// return Value1;
// }
// const T2& GetSecondValue() const
// {
// return Value2;
// }
//};
//int main()
//{
// HoldsPair <> mIntFloatPair(300,10.09);
// //类<指定模板T1,T2是什么> 对象(传入构造函数参数);
// HoldsPair<short,char*> mShortStringPair(25,"Learn templates,love C++");
// //
// cout<<"The first object contains -"<<endl;
// cout<<"Value 1: "<<mIntFloatPair.GetFirstValue()<<endl;
// cout<<"Value 2: "<<mIntFloatPair.GetSecondValue()<<endl;
// cout<<"................"<<endl;
// cout<<"Value1: "<<mShortStringPair.GetFirstValue()<<endl;
// cout<<"Value2: "<<mShortStringPair.GetSecondValue()<<endl;
// return 0;
//}
////14.5
//初始化模板类的静态成员
//#include<iostream>
//using namespace std;
//template <typename T>
//class TestStatic
//{
//public:
// static T StaticValue;
//};
//template <typename T> T TestStatic<T>::StaticValue;
//int main()
//{
// TestStatic<int> Int_Year;
// Int_Year.StaticValue =2011;
// TestStatic<int> Int_2;
// TestStatic<double> Double1;
// TestStatic<double> Double2;
// Double2.StaticValue =1011.11;
// cout<<"Double1.StaticValue: "<<Double1.StaticValue<<endl;
// cout<<"Int_2.StaticValue: "<<Int_2.StaticValue<<endl;
//}
//14.6
//static_assert用法
//#include<iostream>
//using namespace std;
//template <typename T>
//class EverytingButInt
//{
//public:
// EverytingButInt()
// {
// static_assert(sizeof(T) != sizeof(int),"No int please!");
// cout<<"OK"<<endl;
// }
//};
//int main()
//{
// EverytingButInt<short> test;
//}
////14.7.2 -1
//#include<iostream>
//using namespace std;
//#define SQUARE(x,y) ((x)*(y))
//int main()
//{
//// cout<<"Enter a integer: "<<endl;
// int Input1 = 12;
// int Input2 =10;
// cout<<SQUARE(Input1,Input2)<<endl;
//}
//14.7.2 -2
//#include<iostream>
//using namespace std;
//template <typename Type>
//Type SquareTwoNumber(const Type& value1, const Type& value2)
//{
// return (value1*value2);
//}
//template <typename Type>
//void DisplayComparision(const Type& value1, const Type& value2)
//{
// cout<<SquareTwoNumber(value1,value2)<<endl;
//}
//int main()
//{
// int Int1 = 10,Int2 = 11;
// DisplayComparision(Int1,Int2);
//}
//14.7.2 -3
//#include<iostream>
//using namespace std;
//template <typename T>
//void SwapTwoNumber( T& value1, T& value2)
//{
// T value3;
// value3 =value1;
// value1 =value2;
// value2 =value3;
//}
//int main()
//{
// int Int1 = 10,Int2 = 11;
// SwapTwoNumber(Int1,Int2);
// cout<<"Int1 :"<<Int1<<endl;
// cout<<"Int2 :"<<Int2<<endl;
//}
////15.1
////在vector中查找元素及位置
//#include<iostream>
//#include<vector>
//#include<algorithm>
//using namespace std;
//int main()
//{
// vector<int> vecIntegerArray;
// vecIntegerArray.push_back(50);
// vecIntegerArray.push_back(2991);
// vecIntegerArray.push_back(23);
// vecIntegerArray.push_back(9999);
// //???vector<int>::iterator 是每个元素的类型
// //vecIntegerArray.end 最后一个元素的地址再加1
// auto iArrayWalker = vecIntegerArray.begin();
// cout<<"show *iArrayWalker"<<*iArrayWalker<<endl;
// cout<<"The contents of the vector are: "<<endl;
// while(iArrayWalker != vecIntegerArray.end())
// {
// cout<<*iArrayWalker<<endl;
// ++iArrayWalker;
// }
//// vector <int>::iterator iElement = find(vecIntegerArray.begin(), vecIntegerArray.end(),9999);
// auto iElement = find(vecIntegerArray.begin(), vecIntegerArray.end(),9999);
// if(iElement != vecIntegerArray.end())
// {
// int Position = distance(vecIntegerArray.end(),iElement);
// cout<<"Value"<<*iElement;
// cout<<"found in the vector at position"<<Position<<endl;
// }
// return 0;
//};
//16.1
//#include<iostream>
//#include<string>
////using namespace std;
//int main()
//{
// using namespace std;
// const char* constCStyleString = "Hello String";
// cout<<"Constant string is: "<<constCStyleString<<endl;
// std::string strFromConst (constCStyleString);
// cout<<"strFromConst is: "<<strFromConst<<endl;
// std::string str2("hello string!");
// std::string str2Copy(str2);
// cout<<"str2Copy is :"<<str2Copy<<endl;
// std::string strPartialCopy (constCStyleString,5);
// cout<<"strPartialCopy"<<strPartialCopy<<endl;
// std::string strRepeatChars(10,'a');
// cout<<"strReatChars"<<strRepeatChars<<endl;\
// return 0;
//}
////16.2
//size_t
//#include<iostream>
//#include<string>
//using namespace std;
//int main()
//{
// string strSTLString ("hello string");
// cout<<"SSSSSSSSSSSSSSSSSSSSSSS"<<endl;
// for(size_t nCharCounter =0;nCharCounter<strSTLString.length();++nCharCounter)
// {
// cout<<"Character[" <<nCharCounter << "] is : ";
// cout<<strSTLString[nCharCounter]<<endl;
// }
// cout<<endl;
// cout<<"..................................."<<endl;
// int charOffset= 0;
// string::const_iterator iCharacterLocator;
// for(iCharacterLocator = strSTLString.begin();iCharacterLocator!=strSTLString.end();++iCharacterLocator)
// {
// cout<<"Character["<<charOffset++<<"] is : ";
// cout<<*iCharacterLocator<<endl;
// }
// cout<<endl;
// cout<<"--------------------------------------"<<endl;
// cout<<strSTLString.c_str()<<endl;
//}
////16.3
////写上功能
////append 附加
///拼接字符串
//#include<iostream>
//#include<string>
//int main()
//{
// using namespace std;
// string strSample1("Hello");
// string strSample2("String!");
// strSample1 +=strSample2;
// cout<<strSample1<<endl;
// string strSample3("FUN is not needing to use pointers");
// strSample1.append(strSample3);
// cout<<strSample1<<endl;
// const char* constCStyleString = "You however still can!";
// strSample1.append(constCStyleString);
// cout<<strSample1<<endl;
// return 0;
//}
////16.4
//查找字符 find()
//#include<iostream>
//#include<string>
//using namespace std;
//int main()
//{
// string strSample("Good day String! today is beautiful!");
// cout<<"The sample string is: "<<endl;
// cout<<strSample<<endl<<endl;
// size_t charPos =strSample.find("day",0);
// if(charPos != string::npos)
// cout<<"Find instance of \"day\"was found at position " <<charPos;
// else
// cout<<"substring not found."<<endl;
// cout<<endl<<endl;
// cout<<"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"<<endl;
// //size_t 和int 类型差不多
// size_t SubstringPos = strSample.find("day",0);
//// cout<<SubstringPos<<endl;
//// //一个非常大的数
//// cout<<string::npos<<endl;
// while(SubstringPos != string::npos)
// {
// cout<<"day found at position :"<<SubstringPos<<endl;
// int nSearchPosition = SubstringPos +1;
// //从nSearchPosition开始查找字符,返回的是字符的位姿
// SubstringPos =strSample.find("day",nSearchPosition);
// cout<<SubstringPos<<endl;
// }
// cout<<"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"<<endl;
// const char charToSearch = 'a';
// charPos = strSample.find(charToSearch,0);
// cout<<charPos<<endl;
// while(charPos!= string::npos)
// {
// cout<<" ' "<<charToSearch<<"'";
// cout<<"at position: "<<charPos<<endl;
// size_t charSearchPos= charPos +1;
// charPos = strSample.find(charToSearch,charSearchPos);
// }
// return 0;
//}
//16.5
//erase用法
//#include<iostream>
//#include<algorithm>
//#include<string>
//using namespace std;
//int main()
//{
// string strSample("hello SSSSString!String! wake up to a beautiful day!");
// cout<<strSample<<endl<<endl;
// //在给定的偏移位置删除指定数目的字符。
// strSample.erase(13,1);
// cout<<strSample<<endl<<endl;
// cout<<"1111111111111111111111111111111111"<<endl;
// //返回的是啥玩意
// //不识别大小写
// //string::iteraSSSStor 是啥玩意 指针
// //find(first,end,value) 返回的是区间(first,end)中第一个值等于value值的元素位置,若未找到,返回end.函数返回的是迭代器或指针
// string::iterator iCharS = find(strSample.begin(),strSample.end(),'z');
//// cout<<*iCharS<<endl;
// if(iCharS != strSample.end())
// strSample.erase(iCharS);
// cout<<strSample<<endl;
// cout<<"2222222222222222222222222222222222222"<<endl;
// strSample.erase(strSample.begin(),strSample.end());
// if(strSample.length() ==0)
// cout<<"empty"<<endl;
//}
//实现函数的反转
//#include<iostream>
//#include<string>
//#include<algorithm>
//using namespace std;
//int main()
//{
// string strSample("Hello String! We will reverse you");
// cout<<strSample<<endl;
// reverse(strSample.begin(),strSample.end());
// cout<<strSample<<endl;
//}
////16.7
////编译不通过
//#include<iostream>
//#include<string>
//#include<algorithm>
//using namespace std;
//int main()
//{
// string strSample("hello my world");
// cout<<strSample<<endl;
// transform(strSample.begin(),strSample.end(),strSample.begin(), std::toupper);
// cout<<strSample<<endl;
//}
////16.6.2 -1
////看输入的字符串是否是回文
//#include<string>
//#include<iostream>
//#include<algorithm>
//int main()
//{
// using namespace std;
// cout<<"..SRART.."<<endl;
// string strInput ="abcBa";
// string strCopy(strInput);
// reverse(strCopy.begin(),strCopy.end());
// if(strCopy == strInput)
// cout<<"OK"<<endl;
// else
// cout<<"no"<<endl;
//}
////16.6.2 -2
////计算字符串元音字符的个数
//#include<iostream>
//#include<string>
//using namespace std;
//int GetNumCharacters(string& strInput, char chToFind)
//{
// int nNumCharactersFound =0;
// //??size_t 类似于int 类型
// size_t nCharOffset = strInput.find(chToFind);
// //string::npos 是一个非常大的数值
//// cout<<string::npos<<endl;
// while(nCharOffset != string::npos)
// {
// ++nNumCharactersFound;
// nCharOffset = strInput.find(chToFind,nCharOffset+1);
// }
// return nNumCharactersFound;
//}
//int main()
//{
// cout<<"..START.."<<endl;
// string strInput = "aeioubbb";
// int nNumVowels = GetNumCharacters(strInput,'a');
// nNumVowels += GetNumCharacters(strInput,'e');
// nNumVowels += GetNumCharacters(strInput,'i');
// nNumVowels += GetNumCharacters(strInput,'o');
// nNumVowels += GetNumCharacters(strInput,'u');
// cout<<nNumVowels<<endl;
// return 0;
//}
////16.6.2 -3
////对一个字符串,每隔一个字符将该字符变成大写
//#include<iostream>
//#include<algorithm>
//#include<string>
//int main()
//{
// using namespace std;
// cout<<"..START.."<<endl;
// string strInput = "abcdefg";
// for(size_t nCharIndex =0;nCharIndex <strInput.length();nCharIndex+=2)
// {
// strInput[nCharIndex] = toupper(strInput[nCharIndex]);
// }
// cout<<strInput<<endl;
//}
////16.6.2 -4
////将每个字符隔一个空格再合并
//#include<iostream>
//#include<string>
//using namespace std;
//int main()
//{
// string str1 = "I";
// string str2 = "LOVE";
// string str3 = "YOU";
// string strOutput = str1 + ' ' + str2 + ' ' + str3;
// cout<<strOutput<<endl;
//}
////17.1
//向量初始化
//#include<vector>
//int main()
//{
// std::vector<int> vecIntegers;
// //这个向量初始化为10个元素,可以更大
// std::vector<int> vecWithTenElements(10);
// //10个元素,每个元素初始化为90
// std::vector<int> vecWithTenInitializedElements(10,90);
// //将另一个向量进行复制
// std::vector<int> vecArrayCopy(vecWithTenInitializedElements);
// //将另一个向量的一些元素进行复制
// std::vector<int> vecSomeElementsCopied(vecWithTenElements.cbegin(),vecWithTenElements.cbegin()+5);
//}
////17.2使用push_back()插入元素
//#include<iostream>
//#include<vector>
//using namespace std;
//int main()
//{
// vector<int> vecIntegers;
// vecIntegers.push_back(50);
// vecIntegers.push_back(11);
// vecIntegers.push_back(10);
// vecIntegers.push_back(91);
// vecIntegers.push_back(10);
// vecIntegers.push_back(81);
// cout<<"OUTPUT"<<vecIntegers.size()<<endl;
// //不行
// cout<<vecIntegers<<endl;
//}
////17.3
////向量中插入元素
//#include<iostream>
//#include<vector>
//using namespace std;
//void DisplayVector(const vector<int>& vecInput)
//{
// for(auto iElement = vecInput.cbegin();iElement != vecInput.cend(); ++iElement)
// {
// cout<<*iElement<<" ";
// }
//}
//int main()
//{
// //向量初始化为4个元素,每个元素的值为90
// vector<int> vecIntegers(4,90);
// DisplayVector(vecIntegers);
// cout<<endl;
// //在向量的开头插入元素25
// vecIntegers.insert(vecIntegers.begin(),25);
// //在向量的末尾插入2个元素 45
// vecIntegers.insert(vecIntegers.end(),2,45);
// //显示向量
// DisplayVector(vecIntegers);
// cout<<endl;
// vector<int> vecAnother(4,30);
// //在第二个位置插入另一个向量
// vecIntegers.insert(vecIntegers.begin()+1,vecAnother.begin(),vecAnother.end());
// DisplayVector(vecIntegers);
//}
////17.4
//访问向量元素并修改
//#include<iostream>
//#include<vector>
//using namespace std;
//int main()
//{
// vector<int> vecIntegerArray;
// vecIntegerArray.push_back(11);
// vecIntegerArray.push_back(12);
// vecIntegerArray.push_back(123);
// vecIntegerArray.push_back(11111);
// for(size_t Index =0;Index <vecIntegerArray.size();Index++)
// {
// cout<<vecIntegerArray[Index]<<" ";
// }
// cout<<endl;
// vecIntegerArray[2] =11111;
// cout<<vecIntegerArray[2]<<endl;
//}
////17.5
//用指针访问vector中的元素
//#include<iostream>
//#include<vector>
//using namespace std;
//int main()
//{
// vector<int> vecIntegers;
// vecIntegers.push_back(11);
// vecIntegers.push_back(12);
// vecIntegers.push_back(1111);
// vecIntegers.push_back(12221);
// vector<int>::iterator iElementLocator = vecIntegers.begin();
// while(iElementLocator != vecIntegers.end())
// {
// cout<<*iElementLocator<<" ";
// ++iElementLocator;
// }
//}
////17.6
////使用pop_back 删除最后一个元素
//#include<iostream>
//#include<vector>
//using namespace std;
//template <typename T>
//void DisplayVector(const vector<T>& vecInput)
//{
// for(auto iElement = vecInput.cbegin();iElement != vecInput.cend();iElement++)
// {
// cout<<*iElement<<" ";
// }
//}
//int main()
//{
// vector<int> vecIntegers;
// vecIntegers.push_back(1);
// vecIntegers.push_back(12);
// vecIntegers.push_back(1111);
// vecIntegers.push_back(2222);
// DisplayVector(vecIntegers);
// cout<<endl;
// vecIntegers.pop_back();
// DisplayVector(vecIntegers);
//}
//17.7 演示size()和capacity()
//#include<iostream>
//#include<vector>
//using namespace std;
//int main()
//{
// vector<int> vecIntegers(5);
// cout<<vecIntegers.size()<<endl;
// cout<<vecIntegers.capacity()<<endl;
// cout<<endl;
// vecIntegers.push_back(1);
// cout<<vecIntegers.size()<<endl;
// cout<<vecIntegers.capacity();
// cout<<endl;
// vecIntegers.push_back(12);
// cout<<vecIntegers.size()<<endl;
// cout<<vecIntegers.capacity();
//}
//17.8
//在开头插入元素
//在开头删除元素
//#include<deque>
//#include<iostream>
//#include<algorithm>
//using namespace std;
//int main()
//{
// deque<int> dqIntegers;
// dqIntegers.push_back(1);
// dqIntegers.push_back(12);
// dqIntegers.push_back(12);
// //在数组的开头插入元素
// dqIntegers.push_front(1);
// dqIntegers.push_front(2);
// dqIntegers.push_front(3);
// for(size_t nCount = 0;nCount <dqIntegers.size(); ++nCount)
// {
// cout<<dqIntegers[nCount]<<" ";
// }
// cout<<endl;
// dqIntegers.pop_front();
// for(size_t nCount = 0;nCount <dqIntegers.size(); ++nCount)
// {
// cout<<dqIntegers[nCount]<<" ";
// }
//}
//#include<vector>
//#include<iostream>
//using namespace std;
//int main()
//{
// vector<int> vecData;
// vecData.push_back(11);
// vecData.push_back(12);
// vecData.push_back(13);
// cout<<vecData[2]<<endl;
//}
////8.1
//#include<list>
//#include<vector>
//int main()
//{
// using namespace std;
// list<int> listIntegers;
// list<int> listWith10Integers(10);
// list<int> listWith4IntegerEach99(10,99);
// list<int> listCopyAnother(listWith4IntegerEach99);
// vector<int> vecIntegers(10,2011);
// list<int> listContainsCopyOfAnother(vecIntegers.cbegin(),vecIntegers.cend());
// return 0;
//}
////18.2
////使用push_back和push_front插入元素
//#include<list>
//#include<iostream>
//using namespace std;
//template<typename T>
//void DisplayContents(const T& Input)
//{
// for(auto iElement = Input.cbegin();iElement !=Input.cend();++iElement)
// {
// cout<<*iElement<<" ";
// }
// cout<<endl;
//}
//int main()
//{
// std::list <int> listIntegers;
// listIntegers.push_front(10);
// listIntegers.push_front(2011);
// listIntegers.push_back(-1);
// listIntegers.push_back(11);
// DisplayContents(listIntegers);
//}
//18.3
//在list中插入元素的各种方法
//#include<iostream>
//#include<list>
//using namespace std;
//template<typename T>
//void DisplayContents(const T& Input)
//{
// for(auto iElement =Input.cbegin();iElement != Input.cend();++iElement)
// {
// cout<<*iElement<<' ';
// }
// cout<<endl;
//}
//int main()
//{
// list<int> listIntegers1;
// listIntegers1.insert(listIntegers1.begin(),2);
// listIntegers1.insert(listIntegers1.begin(),1);
// listIntegers1.insert(listIntegers1.end(),3);
// cout<<"The contents of list 1 after inserting elements"<<endl;
// DisplayContents(listIntegers1);
// list<int> listIntegers2;
// listIntegers2.insert(listIntegers2.begin(),4,2);
// cout<<"The contents of list 2 after inserting"<<endl;
// cout<<listIntegers2.size()<<endl;
// DisplayContents(listIntegers2);
// list<int> listIntegers3;
// listIntegers3.insert(listIntegers3.begin(),listIntegers1.begin(),listIntegers1.end());
// cout<<"the contents of list 3 after inserting the contents of ";
// cout<<"list 1 at the begining"<<endl;
// DisplayContents(listIntegers3);
// listIntegers3.insert(listIntegers3.end(),listIntegers2.begin(),listIntegers2.end());
// cout<<"the contents of list 3 after inserting the contents of";
// cout<<"list 2 at the end"<<endl;
// DisplayContents(listIntegers3);
//}
////18.4
////删除list中的元素
//#include<list>
//#include<iostream>
//using namespace std;
//template<typename T>
//void DisplayContents(const T& Input)
//{
// for(auto iElement =Input.cbegin();iElement != Input.cend();++iElement)
// {
// cout<<*iElement<<" ";
// }
// cout<<endl;
//}
//int main()
//{
// std::list<int> listIntegers;
// listIntegers.push_back(4);
// listIntegers.push_front(3);
// listIntegers.push_back(5);
// auto iValue2 =listIntegers.insert(listIntegers.begin(),2);
// cout<<"Initial contents of the list:"<<endl;
// DisplayContents(listIntegers);
// listIntegers.erase(listIntegers.begin(),iValue2);
// cout<<"contents after erasing a range of elements:"<<endl;
// DisplayContents(listIntegers);
// cout<<"After erasing element"<<*iValue2<<endl;
// listIntegers.erase(iValue2);
// DisplayContents(listIntegers);
// listIntegers.erase(listIntegers.begin(),listIntegers.end());
// cout<<"Number of elements after erasing range:"<<endl;
// cout<<listIntegers.size()<<endl;
// return 0;
//}
////使用list::reverse() 反转元素的排列顺序
///18.5
//#include<list>
//#include<iostream>
//using namespace std;
//template<typename T>
//void DisplayContents(const T& Input)
//{
// for(auto iElement =Input.cbegin();iElement != Input.cend();++iElement)
// {
// cout<<*iElement<<" ";
// }
// cout<<endl;
//}
//int main()
//{
// std::list<int> listIntegers;
// listIntegers.push_back(4);
// listIntegers.push_front(3);
// listIntegers.push_back(5);
// DisplayContents(listIntegers);
// listIntegers.reverse();
// DisplayContents(listIntegers);
// return 0;
//}
////18.6
////使用list::sort()将整型list按照升序和降序排列
//#include<list>
//#include<iostream>
//using namespace std;
//bool SortPredicate_Descending(const int& lsh,const int& rsh)
//{
// return(lsh>rsh);
//}
//template<typename T>
//void DisplayContents(const T& Input)
//{
// for(auto iElement =Input.cbegin();iElement != Input.cend();++iElement)
// {
// cout<<*iElement<<" ";
// }
// cout<<endl;
//}
//int main()
//{
// std::list<int> listIntegers;
// listIntegers.push_back(1);
// listIntegers.push_front(3);
// listIntegers.push_back(2);
// DisplayContents(listIntegers);
// listIntegers.sort();
// DisplayContents(listIntegers);
// listIntegers.sort(SortPredicate_Descending);
// DisplayContents(listIntegers);
// return 0;
//}
//18.8
//forward_list 单向链表
//#include<iostream>
//#include<forward_list>
//using namespace std;
//template<typename T>
//void DisplayContents(const T& Input)
//{
// for(auto iElement =Input.cbegin();iElement != Input.cend();++iElement)
// {
// cout<<*iElement<<" ";
// }
// cout<<endl;
//}
//int main()
//{
// forward_list<int> flistIntegers;
// flistIntegers.push_front(1);
// flistIntegers.push_front(26);
// flistIntegers.push_front(24);
// flistIntegers.push_front(23);
// flistIntegers.push_front(22);
// DisplayContents(flistIntegers);
// flistIntegers.remove(23);
// flistIntegers.sort();
// DisplayContents(flistIntegers);
//}
////18.7存储对象的list
//#include<string>
//#include<iostream>
//#include<list>
//using namespace std;
//template<typename T>
//void DisplayContents(const T& Input)
//{
// for(auto iElement =Input.cbegin();iElement != Input.cend();++iElement)
// {
// cout<<*iElement<<" ";
// }
// cout<<endl;
//}
////体验一把结构体
//struct ContactItem
//{
// string strContactsName;
// string strPhoneNumber;
// string strDisplayRepresentation;
// ContactItem(const string& strName,const string& strNumber)
// {
// strContactsName = strName;
// strPhoneNumber = strNumber;
// strDisplayRepresentation = (strContactsName+' '+strPhoneNumber);
// }
// bool operator == (const ContactItem& itemToCompare) const
// {
// return (itemToCompare.strContactsName == this->strContactsName);
// }
// bool operator < (const ContactItem& itemToCompare) const
// {
// return (this->strContactsName<itemToCompare.strContactsName);
// }
// operator const char*() const
// {
// return strDisplayRepresentation.c_str();
// }
//};
//bool SortOnPhoneNumber(const ContactItem& item1,const ContactItem& item2)
//{
// return(item1.strPhoneNumber<item2.strPhoneNumber);
//}
//int main()
//{
// list<ContactItem> Contacts;
// Contacts.push_back(ContactItem("Jack","#1"));
// Contacts.push_back(ContactItem("Bill","#2"));
// Contacts.push_back(ContactItem("Angle","#3"));
// Contacts.push_back(ContactItem("Bara","#4"));
// //为什么显示的是最后一个东西呢
// DisplayContents(Contacts);
// Contacts.sort();
// DisplayContents(Contacts);
// Contacts.sort(SortOnPhoneNumber);
// DisplayContents(Contacts);
// Contacts.remove(ContactItem("Bill",""));
// DisplayContents(Contacts);
//}
////18.6.2 -2
//#include<iostream>
//#include<list>
//#include<vector>
//using namespace std;
//template<typename T>
//void DisplayContents(const T& Input)
//{
// for(auto iElement =Input.cbegin();iElement != Input.cend();++iElement)
// {
// cout<<*iElement<<' ';
// }
// cout<<endl;
//}
//int main()
//{
// vector<int> vecIntegers1;
// vecIntegers1.push_back(11);
// vecIntegers1.push_back(22);
// list<int> listIntegers3;
// listIntegers3.push_back(1111);
// listIntegers3.insert(listIntegers3.end(),vecIntegers1.begin(),vecIntegers1.end());
// cout<<"the contents of list 3 after inserting the contents of ";
// cout<<"list 1 at the begining"<<endl;
// DisplayContents(listIntegers3);
//}
////18.6.2 -3
//#include<iostream>
//#include<list>
//#include<vector>
//using namespace std;
//template<typename T>
//void DisplayContents(const T& Input)
//{
// for(auto iElement =Input.cbegin();iElement != Input.cend();++iElement)
// {
// cout<<*iElement<<' ';
// }
// cout<<endl;
//}
//int main()
//{
// vector<int> vecIntegers1;
// vecIntegers1.push_back(11);
// vecIntegers1.push_back(22);
// list<int> listIntegers3;
// listIntegers3.push_back(1111);
// listIntegers3.insert(listIntegers3.end(),vecIntegers1.begin(),vecIntegers1.end());
// cout<<"the contents of list 3 after inserting the contents of ";
// cout<<"list 1 at the begining"<<endl;
// DisplayContents(listIntegers3);
//}
////19.1
////set 和multiset 集合类,他们俩一个可以不可以包含重复,一个可以包含重复的值
//#include<set>
//template <typename T>
//struct SortDescending
//{
// bool operator()(const T& lhs,const T& rhs) const
// {
// return (lhs >rhs);
// }
//};
//int main()
//{
// using namespace std;
// set<int> setIntegers1;
// multiset<int> msetIntegers1;
// set<int,SortDescending<int>> setIntegers2;
// multiset<int,SortDescending<int>> msetIntegers2;
// set<int> setIntegers3(setIntegers1);
// multiset<int> msetIntegers3(msetIntegers1.cbegin(),msetIntegers1.cend());
//}
////19.2
////在集合中插入元素
//#include<set>
//#include<iostream>
//using namespace std;
//template<typename T>
//void DisplayContents(const T& Input)
//{
// for(auto iElement =Input.cbegin();iElement !=Input.cend();++iElement)
// {
// cout<<*iElement<<' ';
// }
//}
//int main()
//{
// set<int> setIntegers;
// multiset<int> msetIntegers;
// setIntegers.insert(60);
// setIntegers.insert(-1);
// setIntegers.insert(3000);
// DisplayContents(setIntegers);
// msetIntegers.insert(setIntegers.cbegin(),setIntegers.cend());
// msetIntegers.insert(3000);
// DisplayContents(msetIntegers);
// cout<<endl;
// cout<<msetIntegers.count(3000)<<endl;
//}
////19.3
////查找集合中的元素
//#include<set>
//#include<iostream>
//using namespace std;
//int main()
//{
// set<int> setIntegers;
// setIntegers.insert(43);
// setIntegers.insert(78);
// setIntegers.insert(-1);
// setIntegers.insert(124);
// for(auto iElement =setIntegers.cbegin();iElement != setIntegers.cend();++iElement)
// {
// cout<<*iElement<<" ";
// }
// cout<<endl;
// auto iElementFound = setIntegers.find(1);
// if(iElementFound != setIntegers.end())
// {
// cout<<*iElementFound<<endl;
// }
// else
// {
// cout<<"not found"<<endl;
// }
//}
//删除指定的元素
//19.4
//#include<set>
//#include<iostream>
//using namespace std;
//template <typename T>
//void DisplayContents(const T& Input)
//{
// for(auto iElement =Input.cbegin();iElement !=Input.cend();++iElement)
// {
// cout<<*iElement<<" ";
// }
//}
//typedef multiset <int> MSETINT;
//int main()
//{
// MSETINT msetIntegers;
// msetIntegers.insert(43);
// msetIntegers.insert(78);
// msetIntegers.insert(-1);
// msetIntegers.insert(124);
// cout<<"multiset contains "<<msetIntegers.size()<<" elements.";
// cout<<"There are ";
// DisplayContents(msetIntegers);
// cout<<endl;
// msetIntegers.erase(124);//删除指定的元素
// cout<<"multiset contains "<<msetIntegers.size()<<" elements.";
// cout<<"There are ";
// DisplayContents(msetIntegers);
//}
////19.5
////使用find和erase的STL set
//#include<set>
//#include<iostream>
//#include<string.h>
//using namespace std;
//template <typename T>
//void DisplayContents(const T& Input)
//{
// for(auto iElement =Input.cbegin();iElement != Input.cend();++iElement)
// {
// cout<<*iElement<<" ";
// }
// cout<<endl;
//}
//struct ContactItem
//{
// string strContactName;
// string strPhoneNumber;
// string strDisplayRepresentation;
// ContactItem(const string& strName,const string& strNumber)
// {
// strContactName = strName;
// strPhoneNumber = strNumber;
// strDisplayRepresentation = (strContactName+' '+strPhoneNumber);
// }
// bool operator == (const ContactItem& itemToCompare) const
// {
// return (itemToCompare.strContactName == this->strContactName);
// }
// bool operator < (const ContactItem& itemToCompare) const
// {
// return (this->strContactName< itemToCompare.strContactName);
// }
// //used in DisplayContents()
// operator const char*() const
// {
// return strDisplayRepresentation.c_str();
// }
//};
//int main()
//{
// set<ContactItem> setContacts;
// setContacts.insert(ContactItem("Jack","+110"));
// setContacts.insert(ContactItem("Bill","+120"));
// setContacts.insert(ContactItem("Angle","+130"));
// setContacts.insert(ContactItem("Barack","+140"));
// DisplayContents(setContacts);//上面有讲
// string NameInput = "Jac";
// auto iContactFound = setContacts.find(ContactItem(NameInput,""));
// if(iContactFound != setContacts.end())
// {
// setContacts.erase(iContactFound);
// DisplayContents(setContacts);
// }
// else
// {
// cout<<"Contact not found"<<endl;
// }
// return 0;
//}
//19.6
//unorderedset的用法
//#include<unordered_set>
//#include<set>
//#include<iostream>
//using namespace std;
//template <typename T>
//void DisplayContents(const T& Input)
//{
// cout<<"Number of elements,size() = "<<Input.size()<<endl;
// cout<<"Max bucket count = "<<Input.max_bucket_count()<<endl;
// cout<<"Load factor: "<<Input.load_factor()<<endl;
// cout<<"Max load factor: "<<Input.max_load_factor()<<endl;
// cout<<"Undered set contains"<<endl;
// for(auto iElement = Input.cbegin();iElement != Input.cend();++iElement)
// {
// cout<<*iElement<<" ";
// }
//}
//int main()
//{
// unordered_set<int> usetInt;
// usetInt.insert(10);
// usetInt.insert(5);
// usetInt.insert(1);
// usetInt.insert(12);
// usetInt.insert(1222);
// usetInt.insert(1222222);
// usetInt.insert(1222334);
// DisplayContents(usetInt);
// usetInt.insert(111111);
// DisplayContents(usetInt);
// cout<<endl;
// auto iPairThousand =usetInt.find(1222);
// if(iPairThousand != usetInt.cend())
// {
// cout<<*iPairThousand<<endl;
// }
// else
// {
// cout<<"Not found"<<endl;
// }
//}
//////19.6.2 练习 -2
///// /
//#include<set>
//#include<iostream>
//#include<string>
//#include<string.h>
//using namespace std;
//template <typename T>
//void DisplayContents(const T& Input)
//{
// for(auto iElement = Input.cbegin();iElement != Input.cend();++iElement)
// {
// cout<<*iElement<<" ";
// }
// cout<<endl;
//}
//struct PAIR_WORD_MEANING
//{
// string strWorld;
// string strMeaning;
// string strDisplayRepresentation;
// PAIR_WORD_MEANING(const string& sWord,const string& sMeaning):strWorld(sWord),strMeaning(sMeaning),strDisplayRepresentation(sWord+" "+sMeaning){}
// bool operator < (const PAIR_WORD_MEANING& pairAnotherWord) const
// {
// return (strWorld<pairAnotherWord.strWorld);
// }
// operator const char*() const
// {
// return strDisplayRepresentation.c_str();
// }
//};
//int main()
//{
// multiset<PAIR_WORD_MEANING> msetDictionary;
// PAIR_WORD_MEANING word1("C++","A programming language");
// PAIR_WORD_MEANING word2("Programmer","A geek!");
// msetDictionary.insert(word1);
// msetDictionary.insert(word2);
// DisplayContents(msetDictionary);
//}
////19.6.2 练习 -3
////set 只接受一个相同的数,multiset可接受多个相同的数
//#include<set>
//#include<iostream>
//using namespace std;
//template <typename T>
//void DisplayContent(const T& sequence)
//{
// for(auto iElement = sequence.cbegin();iElement != sequence.cend();++iElement)
// {
// cout<<*iElement<<" ";
// }
//}
//int main()
//{
// multiset<int> msetIntegers;
// msetIntegers.insert(11);
// msetIntegers.insert(11);
// msetIntegers.insert(11);
// msetIntegers.insert(11);
// set<int> setIntegers;
// setIntegers.insert(11);
// setIntegers.insert(11);
// setIntegers.insert(11);
// setIntegers.insert(11);
// DisplayContent(msetIntegers);
// cout<<endl;
// DisplayContent(setIntegers);
//}
////20.1
////实例化STL map和multimap(键类型为int,值类型为string)
//#include<map>
//#include<iostream>
//#include<string>
//template<typename KeyType>
//struct ReverseSort
//{
// bool operator() (const KeyType& key1,const KeyType& key2)
// {
// return(key1 >key2);
// }
//};
//int main()
//{
// using namespace std;
// map<int,string> mapIntToString1;
// multimap<int,string> mmapIntToString1;
// map<int,string> mapIntToString2(mapIntToString1);
// multimap<int,string> mmapIntToString2(mmapIntToString1);
// map<int,string> mapIntToString3(mapIntToString1.cbegin(),mapIntToString1.cend());
// multimap<int,string> mmapIntToString3(mmapIntToString1.cbegin(),mmapIntToString1.cend());
// map<int,string,ReverseSort<int>> mapIntToString4(mapIntToString1.cbegin(),mapIntToString1.cend());
// multimap<int,string,ReverseSort<int>> mmapIntToString4(mmapIntToString1.cbegin(),mmapIntToString1.cend());
//}
////20.2
//使用insert以及数组语法(运算符[]) 在STL map和multimap中插入元素
//#include<map>
//#include<iostream>
//#include<string>
//using namespace std;
//typedef map <int,string> MAP_INT_STRING;
//typedef multimap <int,string> MMAP_INT_STRING;
//template <typename T>
//void DisplayContents(const T& Input)
//{
// for(auto iElement =Input.cbegin();iElement != Input.cend();++iElement)
// {
// cout<<iElement->first<<" -> "<<iElement->second<<endl;
// }
// cout<<endl;
//}
//int main()
//{
// MAP_INT_STRING mapIntToString;
// //不同的表达方式
// mapIntToString.insert(MAP_INT_STRING::value_type(3,"Three"));
// mapIntToString.insert(make_pair(-1,"Minus One"));
// mapIntToString.insert(pair<int,string>(1000,"One Thousand"));
// mapIntToString [100000] = "One Million";
// cout<<"The map contains"<<mapIntToString.size();
// cout<<"key-value pairs. They are: "<<endl;
// DisplayContents(mapIntToString);
// MMAP_INT_STRING mmapIntToString(mapIntToString.cbegin(),mapIntToString.cend());
// mmapIntToString.insert(make_pair(1000,"Thousand"));
// cout<<endl<<"The multimap contains "<<mmapIntToString.size();
// cout<<"key-value pairs.They are: "<<endl;
// DisplayContents(mmapIntToString);
// //1000包含的数量
// cout<<"The number of pairs int the multimap with 1000 as their key:"<<mmapIntToString.count(1000)<<endl;
//}
//20.3
////使用成员函数find在map中查找键-值对
//#include<map>
//#include<iostream>
//#include<string>
//using namespace std;
//template <typename T>
//void DisplayContents(const T& Input)
//{
// for(auto iElement = Input.cbegin();iElement != Input.cend();++iElement)
// {
// cout<<iElement->first<<" -> "<<iElement->second<<endl;
// }
// cout<<endl;
//}
//int main()
//{
// map<int,string> mapIntToString;
// mapIntToString.insert(make_pair(3,"Three"));
// mapIntToString.insert(make_pair(45,"Forty Five"));
// mapIntToString.insert(make_pair(-1,"Minus One"));
// mapIntToString.insert(make_pair(1000,"Thousand"));
// cout<<"The multimap contains "<<mapIntToString.size();
// cout<<"key-value pairs.They are : "<<endl;
// DisplayContents(mapIntToString);
// //find的是具体的数值
// auto iPairFound = mapIntToString.find(1000);
// if(iPairFound != mapIntToString.cend())
// {
// cout<<"Key"<<iPairFound->first<<"points to Value: ";
// cout<<iPairFound->second<<endl;
// }
// else
// {
// cout<<"Not found"<<endl;
// }
//}
////20.4
////删除multimap中的元素
//#include<map>
//#include<iostream>
//#include<string>
//using namespace std;
//template<typename T>
//void DisplayContents(const T& Input)
//{
// for(auto iElement = Input.cbegin();iElement != Input.cend();++iElement)
// {
// cout<<iElement->first<<"->"<<iElement->second<<" ";
// }
// cout<<endl;
//}
//int main()
//{
// multimap<int,string> mmapIntToString;
// mmapIntToString.insert(make_pair(3,"Three"));
// mmapIntToString.insert(make_pair(45,"Forty Five"));
// mmapIntToString.insert(make_pair(-1,"Minus One"));
// mmapIntToString.insert(make_pair(1000,"Thousand"));
// //增加冗余的东西
// mmapIntToString.insert(make_pair(-1,"Minus One"));
// mmapIntToString.insert(make_pair(1000,"Thousand"));
// DisplayContents(mmapIntToString);
// //返回的是数量
// auto NumPairsErased = mmapIntToString.erase(3);
// cout<<NumPairsErased<<endl;
// auto iPairLocator = mmapIntToString.find(45);
// if(iPairLocator != mmapIntToString.cend())
// {
// mmapIntToString.erase(iPairLocator);
// }
// DisplayContents(mmapIntToString);
// mmapIntToString.erase(mmapIntToString.lower_bound(-1),mmapIntToString.upper_bound(1000));
// DisplayContents(mmapIntToString);
//}
//20.5
//自定义排序谓语
//#include<map>
//#include<algorithm>
//#include<string>
//#include<iostream>
//using namespace std;
//template <typename T>
//void DisplayContents(const T& Input)
//{
// for(auto iElement = Input.cbegin();iElement != Input.cend();++iElement)
// {
// cout<<iElement->first<<" -> "<<iElement->second<<endl;
// }
//}
////????
//////编译器的问题
//struct PreIgnoreCase
//{
// bool operator()(const string& str1,const string& str2) const
// {
// string str1NoCase(str1),str2NoCase(str2);
// std::transform(str1.begin(),str1.end(),str1NoCase.begin(),toupper);
// std::transform(str2.begin(),str2.end(),str2NoCase.begin(),toupper);
// return(str1NoCase < str2NoCase);
// }
//};
//typedef map<string,string> DIRECTORY_WITHCASE;
////typedef map<string,string,PreIgnoreCase> DIRECTORY_NOCASE;
//int main()
//{
//// DIRECTORY_WITHCASE dirCaseSensitive;
//// dirCaseSensitive.insert(make_pair("John","232222222"));
//// dirCaseSensitive.insert(make_pair("JOHN","232222222"));
//// dirCaseSensitive.insert(make_pair("Sara","123456879"));
//// dirCaseSensitive.insert(make_pair("Jack","222224522"));
//// DisplayContents(dirCaseSensitive);
//// auto iPairInCaseSensDir = dirCaseSensitive.find("JHN");
//// if(iPairInCaseSensDir != dirCaseSensitive.end())
//// {
//// cout<<iPairInCaseSensDir->first<<"---"<<iPairInCaseSensDir->second<<endl;
//// }
//// else
//// {
//// cout<<"Not Found"<<endl;
//// }
//}
//20.6
////实例化STL散列表实现unordered_map
//#include<iostream>
//#include<string>
//#include<unordered_map>
//using namespace std;
//template <typename T1,typename T2>
//void DisplayUnorderedMap(unordered_map<T1,T2>& Input)
//{
// cout<<"Number of pairs,size(): "<<Input.size()<<endl;
// cout<<"Max bucket count = "<<Input.max_bucket_count()<<endl;
// cout<<"Load factor: "<<Input.load_factor()<<endl;
// cout<<"Max load factor= "<<Input.max_load_factor()<<endl;
// for(auto iElement = Input.cbegin();iElement != Input.cend();++iElement)
// {
// cout<<iElement->first<<"->"<<iElement->second<<" ";
// }
//}
//int main()
//{
// unordered_map<int,string> umapIntToString;
// umapIntToString.insert(make_pair(1,"One"));
// umapIntToString.insert(make_pair(45,"Forty Five"));
// umapIntToString.insert(make_pair(1001,"Thousand one"));
//// DisplayUnorderedMap(umapIntToString);
// umapIntToString.insert(make_pair(11111,"Thousand one one one"));
//// DisplayUnorderedMap(umapIntToString);
// auto iElementFound = umapIntToString.find(45);
// if(iElementFound != umapIntToString.end())
// {
// cout<<"Found Key"<<iElementFound->first<<"points to value";
// cout<<iElementFound->second<<endl;
// }
// else
// {
// cout<<"Not Found"<<endl;
// }
//}
////21.1
////使用一元函数将集合的内容显示在屏幕上
//#include<algorithm>
//#include<iostream>
//#include<vector>
//#include<list>
//using namespace std;
//template <typename elementType>
//struct DisplayElement
//{
// void operator()(const elementType& element) const
// {
// cout<<element<<" ";
// }
//};
//int main()
//{
// vector<int> vecIntegers;
// for(int nCount = 0;nCount <10;++nCount)
// {
// vecIntegers.push_back(nCount);
// }
// list<char> listChars;
// for(char nChar ='a';nChar<'k';++nChar)
// {
// listChars.push_back(nChar);
// }
// for_each(vecIntegers.begin(),vecIntegers.end(),DisplayElement<int>());
// cout<<endl;
// cout<<"Display the list of characters:"<<endl;
// for_each(listChars.begin(),listChars.end(),DisplayElement<char>());
//}
////21.2
////使用函数对象存储状态
//#include<algorithm>
//#include<iostream>
//#include<vector>
//using namespace std;
//template<typename elementType>
//struct DisplayElementKeepCount
//{
// int Count;
// DisplayElementKeepCount():Count(0){}
// void operator()(const elementType& element)
// {
// ++Count;
// cout<<element<<' ';
// }
//};
//int main()
//{
// vector<int> vecIntegers;
// for(int nCount =0; nCount <10;++nCount)
// {
// vecIntegers.push_back(nCount);
// }
// DisplayElementKeepCount<int> Result;
// Result = for_each(vecIntegers.begin(),vecIntegers.end(),DisplayElementKeepCount<int> ());
// cout<<endl;
// cout<<Result.Count<<endl;
//}
////21.4
////返回能被指定的除数整除
//#include<algorithm>
//#include<vector>
//#include<iostream>
//using namespace std;
//template <typename numberType>
//struct IsMultiple
//{
// numberType Divisor;
// IsMultiple(const numberType& divisor)
// {
// Divisor = divisor;
// }
// bool operator ()(const numberType& element) const
// {
// return ((element%Divisor) == 0);
// }
//};
//int main()
//{
// vector<int> vecIntegers;
// for(int nCount= 29;nCount <32;++nCount)
// {
// vecIntegers.push_back(nCount);
// cout<<nCount<<' ';
// }
// //除数
// int Divisor =2;
// auto iElement = find_if(vecIntegers.begin(),vecIntegers.end(),IsMultiple<int>(Divisor));
// if(iElement != vecIntegers.end())
// {
// cout<<"First element in vector divisor by"<<Divisor;
// cout<<" : "<<*iElement<<endl;
// }
//}
////21.5
////使用二元函数将两个范围相乘
//#include<vector>
//#include<iostream>
//#include<algorithm>
//template <typename elementType>
//class Multiply
//{
//public:
// elementType operator ()(const elementType& elem1,const elementType& elem2)
// {
// return (elem1*elem2);
// };
//};
//int main()
//{
// using namespace std;
// vector<int> vecMultiplicand,vecMultiplier;
// for(int nCount1 = 0;nCount1 <10;++nCount1)
// {
// vecMultiplicand.push_back(nCount1);
// }
// for(int nCount2= 100;nCount2 <110;++nCount2 )
// {
// vecMultiplier.push_back(nCount2);
// }
// vector<int> vecResult;
// vecResult.resize(10);
// transform(vecMultiplicand.begin(),vecMultiplicand.end(),vecMultiplier.begin(),vecResult.begin(),Multiply <int>() );
// for(size_t nIndex1 = 0;nIndex1<vecMultiplicand.size();++nIndex1)
// {
// cout<<vecMultiplicand[nIndex1]<<" ";
// }
// cout<<endl;
// for(size_t nIndex2 = 0;nIndex2<vecMultiplier.size();++nIndex2)
// {
// cout<<vecMultiplier[nIndex2]<<" ";
// }
// cout<<endl;
// for(size_t nIndex =0;nIndex <vecResult.size();nIndex++)
// {
// cout<<vecResult[nIndex]<<" ";
// }
//}
////21.7
//#include<vector>
//#include<algorithm>
//#include<iostream>
//using namespace std;
//template <typename T>
//void DisplayContents(const T& Input)
//{
// for(auto iElement= Input.cbegin();iElement != Input.cend();++iElement)
// {
// cout<<*iElement<<endl;
// }
//}
//int main()
//{
// vector<string> vecNames;
// vecNames.push_back("Jim");
// vecNames.push_back("Tom");
// vecNames.push_back("Adam");
// vecNames.push_back("Sam");
// DisplayContents(vecNames);
// cout<<endl;
// sort(vecNames.begin(),vecNames.end());
// DisplayContents(vecNames);
//}
//////21.5.2 -1
/////
//#include<vector>
//#include<iostream>
//#include<algorithm>
//using namespace std;
//template <typename elementType>
//struct DisplayElement
//{
// void operator ()(const elementType& element)
// {
// cout<<element*2<<endl;
// }
//};
//int main()
//{
// vector<int> vecIntegers;
// for(int nCount=0;nCount<10;++nCount)
// {
// vecIntegers.push_back(nCount);
// }
// for_each(vecIntegers.cbegin(),vecIntegers.cend(),DisplayElement<int>());
//}
////21.5.2 -2
//////
//#include<vector>
//#include<iostream>
//#include<algorithm>
//using namespace std;
//template <typename elementType>
//struct DisplayElement
//{
// int Count;
// DisplayElement():Count(0){}
// void operator ()(const elementType& element)
// {
// ++Count;
// cout<<element*2<<endl;
// }
//};
//int main()
//{
// vector<int> vecIntegers;
// for(int nCount=0;nCount<20;++nCount)
// {
// vecIntegers.push_back(nCount);
// }
// DisplayElement<int> Result;
// Result = for_each(vecIntegers.cbegin(),vecIntegers.cend(),DisplayElement<int>());
// cout<<endl;
// cout<<Result.Count<<endl;
//}
////22.1
////在算法for_each()中使用lambda表达式而不是函数对象来显示容器中的内容
//#include<iostream>
//#include<algorithm>
//#include<vector>
//#include<list>
//using namespace std;
//int main()
//{
// vector<int> vecIntegers;
// for(int nCount=0;nCount<10;++nCount)
// {
// vecIntegers.push_back(nCount);
// }
// list<char> listChars;
// for(char nChar = 'a';nChar <'k';++nChar)
// {
// listChars.push_back(nChar);
// }
// for_each(vecIntegers.begin(),vecIntegers.end(),[](int& element){cout<<element<<" ";} );//lambda
// cout<<endl;
// for_each(listChars.begin(),listChars.end(),[](char& element){cout<<element<<" ";});//lambda
//}
////22.2
////查找集合中的第一个偶数
////一元谓词对应的lambda表达式
//#include<algorithm>
//#include<vector>
//#include<iostream>
//using namespace std;
//int main()
//{
// vector<int> vecNums;
// vecNums.push_back(11);
// vecNums.push_back(111);
// vecNums.push_back(12334);
// vecNums.push_back(12);
// auto iEvenNum =find_if(vecNums.begin(),vecNums.end(),[](const int& Num){return ((Num%2)==0);});
// if(iEvenNum != vecNums.end())
// {
// cout<<*iEvenNum<<endl;
// }
//}
////22.3
////
//#include<algorithm>
//#include<vector>
//#include<iostream>
//using namespace std;
//int main()
//{
// vector<int> vecIntegers;
// for(int nCount=25;nCount <=32;++nCount)
// {
// vecIntegers.push_back(nCount);
// cout<<nCount<<" ";
// }
// int Divisor = 16;
// vector<int>::iterator iElement;
// //什么格式呢
// iElement =find_if(vecIntegers.begin(),vecIntegers.end(),[Divisor](int dividend){return (dividend%Divisor)==0;});
// if(iElement != vecIntegers.end())
// {
// cout<<Divisor<<" : "<<*iElement<<endl;
// }
// return 0;
//}
////22.4
////二元函数对应的lambda表达式
//#include<iostream>
//#include<vector>
//#include<algorithm>
//int main()
//{
// using namespace std;
// vector<int> vecMultiplicand,vecMultiplier;
// for(int nCount1 =0;nCount1 <10;++nCount1)
// {
// vecMultiplicand.push_back(nCount1);
// }
// for(int nCount2 = 100;nCount2< 109;++nCount2)
// {
// vecMultiplier.push_back(nCount2);
// }
// vector<int> vecResult;
// //分配向量的大小
// vecResult.resize(10);
// //前两个数是范围,第3个数是,第4个数是保存的结果,第5个是lambda表达式
// transform(vecMultiplicand.begin(),vecMultiplicand.end(),vecMultiplier.begin(),vecResult.begin(),[](int a,int b){return (a*b);});
// for(size_t nIndex1 =0;nIndex1 <vecMultiplicand.size();++nIndex1)
// {
// cout<<vecMultiplicand[nIndex1]<<" ";
// }
// cout<<endl;
// for(size_t nIndex2= 0;nIndex2<vecMultiplier.size();++nIndex2)
// {
// cout<<vecMultiplier[nIndex2]<<" ";
// }
// cout<<endl;
// for(size_t nIndex3 =0;nIndex3 <vecResult.size();++nIndex3)
// {
// cout<<vecResult[nIndex3]<<" ";
// }
//}
////22.5
////二元谓词
//#include<iostream>
//#include<string>
//#include<vector>
//#include<algorithm>
//using namespace std;
//template <typename T>
//void DisplayContents(const T& Input)
//{
// for(auto iElement =Input.cbegin();iElement != Input.cend();++iElement )
// {
// cout<<*iElement<<" ";
// }
//}
//int main()
//{
// vector<string> vecNames;
// vecNames.push_back("aaa");
// vecNames.push_back("zzz");
// vecNames.push_back("bbb");
// vecNames.push_back("ccc");
// DisplayContents(vecNames);
// cout<<endl;
//// sort(vecNames.begin(),vecNames.end());
//// DisplayContents(vecNames);
// //转换成小写,然后进行比较
// //因为有tolower 编译不成功
//// sort(vecNames.begin(),vecNames.end(),
//// [](const string& str1,const string& str2) ->bool
//// {
//// string str1LowerCase;
//// str1LowerCase.resize(str1.size());
//// transform(str1.begin(),str1.end(),str1LowerCase.begin(),tolower);
//// string str2LowerCase;
//// str2LowerCase.resize(str2.size());
//// transform(str2.begin(),str2.end(),str2LowerCase.begin(),tolower);
//// return(str1LowerCase <str2LowerCase);
//// }
//// );
// //22.11.2 -1
// sort(vecNames.begin(),vecNames.end(),
// [](const string& str1,const string& str2)
// {
// return(str1>str2);
// }
// );
// DisplayContents(vecNames);
//}
////22.11.2 -2
////一元函数
//#include<algorithm>
//#include<iostream>
//#include<vector>
//#include<iostream>
//using namespace std;
//template <typename T>
//void DisplayContents(const T& Input)
//{
// for(auto iElement =Input.begin();iElement != Input.end();++iElement)
// {
// cout<<*iElement<<" ";
// }
//}
//int main()
//{
// vector<int> vecIntegers;
// for(int nCount =1;nCount <=10;nCount++)
// {
// vecIntegers.push_back(nCount);
// }
// DisplayContents(vecIntegers);
// int AddNum =2;
// cout<<endl;
// //Num是一个临时变量
// for_each(vecIntegers.begin(),vecIntegers.end(),[AddNum](int Num){cout<<(Num+=AddNum)<<" ";});
//// DisplayContents(vecIntegers);
//}
////23.1
////使用find() 在vector中查找元素,并使用find_if以及用一个用lambda表达式表示的一元谓词查找第一个偶数
//#include<iostream>
//#include<algorithm>
//#include<vector>
//int main()
//{
// using namespace std;
// vector<int> vecIntegers;
// for(int SampleValue =-9;SampleValue <10;++SampleValue)
// {
// vecIntegers.push_back(SampleValue);
// }
// int NumToFound =2;
// auto iElementFound = find(vecIntegers.begin(),vecIntegers.end(),NumToFound);
// if(iElementFound != vecIntegers.end())
// {
// cout<<*iElementFound<<endl;
// }
// else
// {
// cout<<"Not Found"<<endl;
// }
// auto iEvenNumber = find_if(vecIntegers.begin(),vecIntegers.end(),[](int element){return (element%2)==0;});
// if(iEvenNumber != vecIntegers.end())
// {
// cout<<*iEvenNumber<<endl;
//// cout<<"distance"<<distance(vecIntegers.begin(),iEvenNumber);
// }
//}
//23.2
//#include<algorithm>
//#include<vector>
//#include<iostream>
//template <typename elementType>
//bool IsEven(const elementType& number)
//{
// return ((number%2)==0);
//}
//int main()
//{
// using namespace std;
// vector<int> vecIntegers;
// for(int nNum=-9;nNum<10;nNum++)
// {
// vecIntegers.push_back(nNum);
// }
// size_t nNumZeros =count(vecIntegers.begin(),vecIntegers.end(),0);
// cout<<nNumZeros<<endl;
// size_t nNumEvenElements = count_if(vecIntegers.begin(),vecIntegers.end(),IsEven<int>);
// cout<<nNumEvenElements<<endl;
//}
////23.3
////查找后一个序列在前一个序列中的位置
//#include<algorithm>
//#include<vector>
//#include<list>
//#include<iostream>
//using namespace std;
//template <typename T>
//void DisplayContents(const T& Input)
//{
// for(auto iElement =Input.begin();iElement != Input.end();++iElement)
// {
// cout<<*iElement<<" ";
// }
//}
//int main()
//{
// vector<int> vecIntegers;
// for(int nNum =-9;nNum<10;nNum++)
// {
// vecIntegers.push_back(nNum);
// }
// vecIntegers.push_back(9);
// vecIntegers.push_back(9);
// list<int> listIntegers;
// for(int nNum=-4;nNum<5;nNum++)
// {
// listIntegers.push_back(nNum);
// }
// DisplayContents(vecIntegers);
// cout<<endl;
// DisplayContents(listIntegers);
// //查找序列,后一个序列在前一个序列中的位置
// auto iRange =search(vecIntegers.begin(),vecIntegers.end(),listIntegers.begin(),listIntegers.end());
// cout<<endl;
// if(iRange != vecIntegers.end())
// {
// cout<<"distance1 :"<<distance(vecIntegers.begin(),iRange);
// }
// //3个9在前一个序列中的位置
// auto iPartialRange =search_n(vecIntegers.begin(),vecIntegers.end(),3,9);
// cout<<endl;
// if(iPartialRange !=vecIntegers.end())
// {
// cout<<"distance: "<<distance(vecIntegers.begin(),iPartialRange);
// }
//}
////23.4
//在向量中填充3个9
//#include<iostream>
//#include<vector>
//#include<iostream>
//int main()
//{
// using namespace std;
// vector<int> vecIntegers(3);
// fill(vecIntegers.begin(),vecIntegers.end(),9);
// //
// vecIntegers.resize(6);
// //第一个参数是开始位置,加入3个9
// fill_n(vecIntegers.begin()+3,3,-9);
// for(size_t nIndex =0;nIndex <vecIntegers.size();++nIndex)
// {
// cout<<vecIntegers[nIndex]<<" ";
// }
//}
////23.5
//在指定的位置产生随机数
//generate_n是在指定的位置产生n个随机数
//#include<iostream>
//#include<vector>
//#include<algorithm>
//#include<list>
//int main()
//{
// using namespace std;
// vector<int> vecIntegers(10);
// generate(vecIntegers.begin(),vecIntegers.end(),rand);
// for(size_t nCount=0;nCount<10;nCount++)
// {
// cout<<vecIntegers[nCount]<<" ";
// }
// cout<<endl;
// list<int> listIntegers(10);
// //在第一个参数的位置产生5个随机数
// //cbegin是const begin的缩写
// generate_n(listIntegers.begin(),5,rand);
// list<int>::const_iterator iElementLocator;
// for( iElementLocator = listIntegers.begin();iElementLocator != listIntegers.end();++iElementLocator)
// {
// cout<<*iElementLocator<<" ";
// }
//}
////22.6
//#include<iostream>
//#include<algorithm>
//#include<vector>
//#include<string>
//using namespace std;
//template <typename elementType>
//struct DisplayElementKeepCount
//{
// int Count;
// DisplayElementKeepCount():Count(0){}
// void operator ()(const elementType& element)
// {
// ++Count;
// cout<<element<<" ";
// }
//};
//int main()
//{
// vector<int> vecIntegers;
// for(int nCount=0;nCount<10;nCount++)
// {
// vecIntegers.push_back(nCount);
// }
// DisplayElementKeepCount<int> Functor =
// for_each(vecIntegers.begin(),vecIntegers.end(),DisplayElementKeepCount<int>());
// cout<<endl;
// cout<<Functor.Count<<endl;
// string Sample("for_each and strings");
// int NumChars = 0;
// //P335 务必加强联系感
// for_each(Sample.begin(),Sample.end(),[&NumChars](char c)mutable{cout<<c<<" ";++NumChars;});
// cout<<NumChars<<endl;
//}
////23.7
//两个数相加
//#include<iostream>
//#include<string>
//#include<vector>
//#include<deque>
//#include<iostream>
//#include<functional>
//#include<algorithm>
//int main()
//{
// using namespace std;
// string Sample("This is a TEst string!");
// cout<<Sample<<endl;
// //string strLowerCaseCopy;
// //strLowerCaseCopy.resize(Sample.size());
// //qt不好用tolower
// //transform(Sample.begin(),Sample.end(),strLowerCaseCopy.begin(),tolower);
//// cout<<strLowerCaseCopy<<endl;
// vector<int> vecIntegers1,vecIntegers2;
// for(int nNum =0;nNum <10;++nNum)
// {
// vecIntegers1.push_back(nNum);
// vecIntegers2.push_back(10-nNum);
// }
// deque<int> dqResultAddition(vecIntegers1.size());
// //??
// transform(vecIntegers1.begin(),vecIntegers1.end(),vecIntegers2.begin(),dqResultAddition.begin(),plus<int>());
// for(size_t nIndex = 0;nIndex <vecIntegers1.size();++nIndex)
// {
// cout<<nIndex<<" \t "<<vecIntegers1[nIndex]<<" \t+ ";
// cout<<vecIntegers2[nIndex]<<" \t = ";
// cout<<dqResultAddition[nIndex]<<endl;
// }
// return 0;
//}
////23.8
////remove移除指定的元素并且返回最后一个指定元素的下一个元素的位置
//#include<iostream>
//#include<algorithm>
//#include<vector>
//#include<list>
//using namespace std;
//template <typename T>
//void DisplayContents(const T& Input)
//{
// for(auto iElement = Input.cbegin();iElement != Input.cend();++iElement)
// {
// cout<<*iElement<<" ";
// }
//}
//int main()
//{
// list<int> listIntegers;
// for(int nCount=0;nCount<10;++nCount)
// {
// listIntegers.push_back(nCount);
// }
// DisplayContents(listIntegers);
// cout<<endl;
// vector<int> vecIntegers(listIntegers.size()*2);
// //
// auto iLastPos =copy(listIntegers.begin(),listIntegers.end(),vecIntegers.begin());
// cout<<endl<<"A"<<endl;
// DisplayContents(vecIntegers);
// cout<<endl;
// copy_if(listIntegers.begin(),listIntegers.end(),iLastPos,[](int element){return ((element%2) ==1);});
// DisplayContents(vecIntegers);
// cout<<endl;
// //remove都是0的元素
// //qt编译器有问题?x你理解问题啊
// //remove很诡异啊
// //remove
// //返回的是:
// auto iNewEnd =remove(vecIntegers.begin(),vecIntegers.end(),9);
//// cout<<endl;
//// cout<<"fd"<<endl;
//// DisplayContents(vecIntegers);
//// cout<<endl;
//// cout<<distance(vecIntegers.begin(),iNewEnd)<<endl;
//// //erase的是一个区间的元素
// vecIntegers.erase(iNewEnd,vecIntegers.end());
// cout<<"remove 0"<<endl;
// DisplayContents(vecIntegers);
//// cout<<endl;
//// iNewEnd =remove_if(vecIntegers.begin(),vecIntegers.end(),[](int element){return((element%2)==1);});
// //???
//// vecIntegers.erase(iNewEnd,vecIntegers.end());
//// DisplayContents(vecIntegers);
//}
//////换VS编译器
////23.9
//#include<iostream>
//#include<algorithm>
//#include<vector>
//using namespace std;
//template <typename T>
//void DisplayContents(const T& Input)
//{
// for(auto iElement =Input.begin();iElement != Input.end();++iElement)
// {
// cout<<*iElement<<" ";
// }
// cout<<endl;
//}
//int main()
//{
// vector<int> vecIntegers(6);
// //开始为开始位置,重点为起始位置,那不是1个吗????y应该是不包括
// fill(vecIntegers.begin(),vecIntegers.begin()+1,8);
// fill_n(vecIntegers.begin()+3,3,5);
// DisplayContents(vecIntegers);
// //随意洗牌
// random_shuffle(vecIntegers.begin(),vecIntegers.end());
// DisplayContents(vecIntegers);
// //end的位置是不包括的啊xxxxxxx
// //????输出什么回事啊
// //将所有的元素中为5的改成8
// replace(vecIntegers.begin(),vecIntegers.end(),5,9);
// DisplayContents(vecIntegers);
// replace_if(vecIntegers.begin(),vecIntegers.end(),[](int element){return((element%2)==0);},-1);
// DisplayContents(vecIntegers);
//}
//////23.10
//#include<iostream>
//#include<vector>
//#include<string>
//#include<iostream>
//#include<algorithm>
//using namespace std;
//template <typename T>
//void DisplayContents(const T& Input)
//{
// for(auto iElement =Input.begin();iElement != Input.end();++iElement)
// {
// cout<<*iElement<<" ";
// }
// cout<<endl;
//}
//int main()
//{
// vector<string> vecNames;
// vecNames.push_back("John Doe");
// vecNames.push_back("Jack NOO");
// vecNames.push_back("Sean Penn");
// vecNames.push_back("Anna Hoover");
// vecNames.push_back("Jack NOO");
// DisplayContents(vecNames);
// sort(vecNames.begin(),vecNames.end());
// DisplayContents(vecNames);
// //binary_search() 只用于排序后的容器 把sort函数屏蔽就行,就能检验
// bool bElementFound= binary_search(vecNames.begin(),vecNames.end(),"John Doe");
// if(bElementFound)
// {
// cout<<"Found";
// }
// else
// {
// cout<<"Not Found";
// }
// cout<<endl;
// //unique功能:对有序的容器重新排列,将第一次出现的元素从前往后排,其他重复的元素依次排在后面,
// //返回值:返回迭代器,迭代器指向的是重复元素的首地址
// auto iNewEnd = unique(vecNames.begin(),vecNames.end());
// vecNames.erase(iNewEnd,vecNames.end());
// cout<<distance(iNewEnd,vecNames.end());
// DisplayContents(vecNames);
//}
////23.11
//#include<iostream>
//#include<vector>
//#include<algorithm>
//bool IsEven(const int& nNumber)
//{
// return ((nNumber%2)==0);
//}
//using namespace std;
//template<typename T>
//void DisplayContents(const T& Input)
//{
// for(auto iElement =Input.begin();iElement != Input.end();iElement++)
// {
// cout<<*iElement<<" ";
// }
// cout<<endl;
//}
//int main()
//{
// vector<int> vecIntegers;
// for(int nNum =0;nNum<10;nNum++)
// {
// vecIntegers.push_back(nNum);
// }
// DisplayContents(vecIntegers);
// vector<int> vecCopy(vecIntegers);
// //偶数和奇数分成两块
// partition(vecIntegers.begin(),vecIntegers.end(),IsEven);
// DisplayContents(vecIntegers);
// //相对位置不变
// stable_partition(vecCopy.begin(),vecCopy.end(),IsEven);
// DisplayContents(vecCopy);
//}
////23.12
//#include<algorithm>
//#include<list>
//#include<string>
//#include<iostream>
//using namespace std;
//template <typename T>
//void DisplayContens(const T& Input)
//{
// for(auto iElement =Input.begin();iElement != Input.end();++iElement)
// {
// cout<<*iElement<<" ";
// }
// cout<<endl;
//}
//int main()
//{
// list<string> listName;
// listName.push_back("John Doe");
// listName.push_back("John Aaa");
// listName.push_back("Brand Pitt");
// listName.push_back("Sean Dddd");
// listName.push_back("Anna Howww");
// listName.push_back("VVVVV Howww");
// listName.sort();
// DisplayContens(listName);
// //??
// auto iMinInsertPos =lower_bound(listName.begin(),listName.end(),"Brad Pitt");
// cout<<distance(listName.begin(),iMinInsertPos);
// cout<<endl;
// //??
// auto iMaxInsertPos =upper_bound(listName.begin(),listName.end(),"VVVVV Howww");
// cout<<distance(listName.begin(),iMaxInsertPos);
// cout<<endl;
// listName.insert(iMaxInsertPos,"Brad Pitt");
// DisplayContens(listName);
//}
//23.6.2 -2
//向量必须初始化大小吗
//#include<iostream>
//#include<list>
//#include<vector>
//#include<algorithm>
//using namespace std;
//template<typename T>
//void DisplayContents(const T& Input)
//{
// for(auto iElement =Input.begin();iElement != Input.end();++iElement)
// {
// cout<<*iElement<<" ";
// }
// cout<<endl;
//}
//int main()
//{
// list<string> strNames1;
// strNames1.push_back("Lisa");
// strNames1.push_back("Mara");
// strNames1.push_back("Jim");
//向量必须初始化向量的大小吗
// vector<string> vecNames(strNames1.size());
// copy(strNames1.begin(),strNames1.end(),vecNames.begin());
// DisplayContents(vecNames);
//}
////24.1
//实例化STL stack
//#include<stack>
//#include<vector>
//int main()
//{
// using namespace std;
// stack<int> stackInts;
// stack<double> stackDoubles;
// stack<double,vector<double>> stackDoubleIntVector;
// stack<int> stackIntsCopy(stackInts);
// return 0;
//}
////24.2
////使用整型stack
//#include<stack>
//#include<iostream>
//int main()
//{
// using namespace std;
// stack<int> stackInts;
// stackInts.push(25);
// stackInts.push(10);
// stackInts.push(-1);
// stackInts.push(5);
// while(stackInts.size()!= 0)
// {
// cout<<stackInts.top()<<" ";
// stackInts.pop();
// }
// if(stackInts.empty())
// {
// cout<<"OK"<<endl;
// }
//}
////24.3
//实例化STL queue
//#include<queue>
//#include<list>
//int main()
//{
// using namespace std;
// queue<int> qIntegers;
// queue<double> qDoubles;
// queue<double,list<double>> qDoubleIntList;
// queue<int> qCopy(qIntegers);
// return 0;
//}
////24.4
//#include<queue>
//#include<iostream>
//int main()
//{
// using namespace std;
// queue<int> qIntegers;
// qIntegers.push(10);
// qIntegers.push(1);
// qIntegers.push(12);
// qIntegers.push(11);
// cout<<qIntegers.size()<<endl;
// cout<<qIntegers.front()<<endl;
// cout<<qIntegers.back()<<endl;
// while(qIntegers.size() != 0)
// {
// cout<<qIntegers.front()<<" ";
// qIntegers.pop();
// }
// if(qIntegers.empty() != 0)
// {
// cout<<"Empty";
// }
//}
////24.5
//#include<queue>
//int main()
//{
// using namespace std;
// priority_queue<int> pqIntegers;
// priority_queue<double> pqDoubles;
// priority_queue<int, deque<int>,greater<int>> pqIntegers_Inverse;
// priority_queue<int> pqCopy(pqIntegers);
// return 0;
//}
////24.6
//#include<queue>
//#include<iostream>
//int main()
//{
// using namespace std;
// priority_queue<int> pqIntegers;
// pqIntegers.push(10);
// pqIntegers.push(5);
// pqIntegers.push(-1);
// pqIntegers.push(20);
// while(!pqIntegers.empty())
// {
// cout<<pqIntegers.top()<<" ";
// pqIntegers.pop();
// }
//}
////24.7
//#include<queue>
//#include<iostream>
//int main()
//{
// using namespace std;
// priority_queue<int,vector<int>,greater<int>> pqIntegers;
// pqIntegers.push(10);
// pqIntegers.push(5);
// pqIntegers.push(-1);
// pqIntegers.push(30);
// cout<<pqIntegers.size()<<endl;
// while(!pqIntegers.empty())
// {
// cout<<pqIntegers.top()<<" ";
// pqIntegers.pop();
// }
//}
////25.1
//#include<bitset>
//#include<iostream>
//#include<string>
//int main()
//{
// using namespace std;
// bitset<4> fourBits;
// cout<<fourBits<<endl;
// bitset<8> fiveBits("10101");
// cout<<fiveBits<<endl;
// bitset<8> eightbits(255);
// cout<<eightbits<<endl;
// bitset<8> eightBitsCopy(eightbits);
//}
////25.2
////操作位
//#include<iostream>
//#include<string>
//#include<bitset>
//int main()
//{
// using namespace std;
// bitset<8> inputBits(255);
// cout<<inputBits.count()<<endl;
// cout<<inputBits.size()<<endl;
// bitset<8> inputFlipped(inputBits);
// //flip 翻转
// inputFlipped.flip();
// cout<<inputFlipped<<endl;
// cout<<(inputBits&inputFlipped)<<endl;
// cout<<(inputBits|inputFlipped)<<endl;
// cout<<(inputBits ^ inputFlipped)<<endl;
//}
////25.3
//#include<vector>
//int main()
//{
// using namespace std;
// vector<bool> vecBool1;
// vector<bool> vecBool2(10,true);
// vector<bool> vecBool2Copy(vecBool2);
// return 0;
//}
////25.4
//#include<vector>
//#include<iostream>
//using namespace std;
//int main()
//{
// vector<bool> vecBoolFlags(3);
// vecBoolFlags[0] =true;
// vecBoolFlags[1] =true;
// vecBoolFlags[2] =false;
// vecBoolFlags.push_back(true);
// for(size_t nIndex =0;nIndex <vecBoolFlags.size();++nIndex)
// {
// cout<<vecBoolFlags[nIndex]<<" ";
// }
// cout<<endl;
// //反转
// vecBoolFlags.flip();
// for(size_t nIndex =0;nIndex <vecBoolFlags.size();++nIndex)
// {
// cout<<vecBoolFlags[nIndex]<<" ";
// }
// cout<<endl;
//}
////两个bit相加
//#include<bitset>
//#include<iostream>
//int main()
//{
// using namespace std;
// bitset<4> inputBit1("1010");
// cout<<inputBit1<<endl;
// bitset<4> inputBit2("1011");
// cout<<inputBit2<<endl;
// //支持两个对象相加
// bitset<4> addResult(inputBit1.to_ulong()+inputBit2.to_ulong());
// cout<<addResult<<endl;
// //按位反转
// cout<<addResult.flip()<<endl;
//}
////26.1
////智能指针最基本的组成部分
////???
//template<typename T>
//class smart_pointer
//{
//private:
// T* m_pRawPointer;
//public:
// smart_pointer(T* pData): m_pRawPointer(pData){}
// ~smart_pointer() {delete pData;};
// //copy constructor
// smart_pointer(const smart_pointer& anotherSP);
// //???
// //copy assignment operator
// smart_pointer& operator=(const smart_pointer& anotherSP);
// //解除操作符和成员选择操作符让这个类能够用作常规意义上的指针
// //dereference operator 解除操作符
// T& operator*() const
// {
// return *(m_pRawPointer);
// }
// //
// //member selection operator
// T* operator ->() const
// {
// return m_pRawPointer;
// }
//};
////26.2
//???
//template <typename T>
//class deepcopy_smart_pointer
//{
//private:
// T* m_pObject;
//public:
// // ...other functions
// //copy constructor of the deepcopy pointer
// deepcopy_smart_pointer(const deepcopy_smart_pointer& source)
// {
// m_pObject = source->Clone();
// }
// //copy assignment operator
// deepcopy_smart_pointer& operator=(const deepcopy_smart_pointer& source)
// {
// if(m_pObject)
// delete m_pObject;
// m_pObject = source->Clone();
// }
//};
////26.3
//一个破坏性复制智能指针
//template<typename T>
//class destructivecopy_pointer
//{
//private:
// T* pObject;
//public:
// destructivecopy_pointer(T* pInput):pObject(pInput) {}
// ~destructivecopy_pointer(){delete pObject};
// //copy constructor
// destructivecopy_pointer(destructivecopy_pointer& source)
// {
// pObject =source.pObject;
// //destroy source
// source.pObject =0;
// }
// //copy assignment operator 拷贝赋值运算符
// //source ???
// destructivecopy_pointer& operator= (destructivecopy_pointer& rhs)
// {
// if(pObject != source.pObject)
// {
// delete pObject;
// pObject = source.pObject;
// source.pObject =0;
// }
// }
//};
//int main()
//{
// destructivecopy_pointer<int> pNumber(new int);
// destructivecopy_pointer<int> pCopy(pNumber);
//}
////26.4
//#include<iostream>
//#include<memory>
//using namespace std;
//class Fish
//{
//public:
// Fish(){cout<<"Fish:Constructored!"<<endl;}
// ~Fish(){cout<<"Fish:Destructored!"<<endl;}
// void Swim() const {cout<<"Fish swims in water"<<endl;}
//};
//void MakeFishSwim(const unique_ptr<Fish>& inFish)
//{
// inFish->Swim();
//}
//int main()
//{
// unique_ptr<Fish> smartFish(new Fish);
// smartFish->Swim();
//// //不会复制,因为MakeFishSwim的参数为引用
// MakeFishSwim(smartFish);
//// //并没有实例化对象
// unique_ptr<Fish> copySmartFish;
// //
// //copySmartFish =smartFish;
// return 0;
//}
////26.7.2 -2
//#include<memory>
//#include<iostream>
//using namespace std;
//class Fish
//{
//public:
// Fish() {cout<<"Fish:Constructed!"<<endl;}
// ~Fish() {cout<<"Fish: Destructed!"<<endl;}
// void Swim(){ cout<<"Fish swims in water"<<endl;}
//};
//class Carp:public Fish
//{
//};
////引用不会导致切除问题
//void MakeFishSwim(const unique_ptr<Fish>& inFish)
//{
// inFish->Swim();
//}
//int main()
//{
// //注意类的实例化
// unique_ptr<Fish> myCarp(new Carp);
// MakeFishSwim(myCarp);
// return 0;
//}
////27.1
////使用cout和iomanip控制符以10进制,16进制和8进制显示整数
//#include<iostream>
//#include<iomanip>
//using namespace std;
//int main()
//{
// cout<<"Input an integer";
// int Input =253;
// //8进制
// cout<<"Integer in octal: "<<oct<<Input<<endl;
// //16进制
// cout<<"Integer in hexadecimal: "<<hex<<Input<<endl;
// cout<<setiosflags(ios_base::hex|ios_base::showbase|ios_base::uppercase);
// cout<<Input<<endl;
// cout<<resetiosflags(ios_base::hex|ios_base::showbase|ios_base::uppercase);
// cout<<Input<<endl;
// cout<<dec<<Input<<endl;
//}
////27.2
////科学表示法表示Pi和圆的面积
//#include<iostream>
//#include<iomanip>
//using namespace std;
//int main()
//{
// const double Pi = (double)22.0/7;
// cout<<Pi<<endl;
// cout<<setprecision(7);
// cout<<Pi<<endl;
// //??
// cout<<"fixed"<<fixed<<Pi<<endl;
// cout<<"sciencific"<<scientific<<Pi<<endl;
// cout<<"Area of circle: "<<2*Pi*5*5;
//}
////27.3
////设置字段宽度和设置填充字符
//#include<iostream>
//#include<iomanip>
//using namespace std;
//int main()
//{
// cout<<setw(35);
// cout<<"Hey-right aligined!"<<endl;
// cout<<setw(35)<<setfill('*');
// cout<<"Hey-right aligned!"<<endl;
// cout<<"Hey-right aligned!"<<endl;
//}
////27.4
//#include<iostream>
//using namespace std;
//int main()
//{
// int Input =12;
// double Pi = 12.0;
// char Char1 ='c',Char2 ='+',Char3 = '*';
// cout<<Input<<endl;
// cout<<Pi<<endl;
// cout<<Char1<<Char2<<Char3<<endl;
//}
////27.8
////使用ofstream新建一个文本文件并向其写入文本
//#include<fstream>
//#include<iostream>
//#include<string>
//using namespace std;
//int main()
//{
// ofstream myFile;
// myFile.open("HelloFile.txt",ios_base::out);
// if(myFile.is_open())
// {
// //文件输出呢呢
// cout<<"File open successfully"<<endl;
// myFile<<"My first text file!"<<endl;
// myFile<<"Hello file";
// cout<<"Finished writing to file,will close now"<<endl;
// myFile.close();
// }
//}
////27.9
////从创建的文件读取文本
//#include<fstream>
//#include<iostream>
//#include<string>
//using namespace std;
//int main()
//{
// ifstream myFile;
// myFile.open("HelloFile.txt",ios_base::in);
// if(myFile.is_open())
// {
// cout<<"successful"<<endl;
// string fileContents;
// while(myFile.good())
// {
// //获取文件的内容
// getline(myFile,fileContents);
// cout<<fileContents<<endl;
// }
// }
// else
// {
// cout<<"failed"<<endl;
// }
//}
////27.10
////读写二进制文件
///
//#include<fstream>
//#include<iomanip>
//#include<string.h>
//#include<iostream>
//using namespace std;
//struct Human
//{
// Human(){};
// Human(const char* inName, int inAge,const char* inDOB):Age(inAge)
// {
// strcpy(Name,inName);
// strcpy(DOB,inDOB);
// }
// char Name[30];
// int Age;
// char DOB[20];
//};
//int main()
//{
// Human Input("Siddhartha Rao",101,"May 1910");
// //ofstream 写文件
// ofstream fsOut("MyBinary.bin",ios_base::out|ios_base::binary);
// if(fsOut.is_open())
// {
// cout<<"Writing one object of Human to a binary file"<<endl;
// fsOut.write(reinterpret_cast<const char*>(&Input),sizeof(Input));
// fsOut.close();
// }
// //ifstream 读文件
// ifstream fsIn("MyBinary.bin",ios_base::in|ios_base::binary);
// if(fsIn.is_open())
// {
// Human somePerson;
// fsIn.read((char*)& somePerson,sizeof(somePerson));
// cout<<"Reading information from binary file."<<endl;
// cout<<"Name = "<<somePerson.Name<<endl;
// cout<<"Age = "<<somePerson.Age<<endl;
// cout<<"Date of Birth = "<<somePerson.DOB<<endl;
// }
// return 0;
//}
////27.11
////使用std::stringstream 在整型和字符串之间转换
//#include<fstream>
//#include<sstream>
//#include<iostream>
//using namespace std;
//int main()
//{
// cout<<"Enter an integer";
// int Input =122222;
// stringstream converterStream;
// converterStream<<Input;
// string strInput;
// converterStream>>strInput;
// cout<<"Integer Input = "<<Input<<endl;
// cout<<"String gained from integer,strInput = "<<strInput<<endl;
// stringstream anotherStream;
// anotherStream<<strInput;
// int Copy =0;
// anotherStream>>Copy;
// cout<<"Integer gained from string,Copy = "<<Copy<<endl;
//}
//////27.5
//////qt 不适合cin
//#include<stdio.h>
//#include<iostream>
//#include<string>
//using namespace std;
//int main()
//{
// cout<<"Enter a line"<<endl;
// char CStyleStr[10] ={0};
// cin.get(CStyleStr,9);
// cout<<"CStyleStr: "<<CStyleStr<<endl;
// return 0;
//}
21天C++课程代码(完整版)
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...