// 以下是自己当初学 C++ 时的代码,有点象草稿纸,希望对初学者有所帮助:
// 所有函数均在VC下编译运行:
// 1,特殊函数的调用顺序问题
#include <iostream>
using namespace std;
void test();
class mycls{
public:
mycls(){
cout<<"construct mycls"<<endl;
}
~mycls(){
cout<<"destroy mycls"<<endl;
}
};
class myexp{
public:
myexp(){
cout<<"construct myexp"<<endl;
}
~myexp(){
cout<<"destroy myexp"<<endl;
}
myexp(myexp& t){
cout<<"copy construct myexp"<<endl;
}
/* 注释掉拷贝构造函数结果是:
construct mycls
in try
in fun test()
construct myexp
destroy myexp
destroy mycls
in catch
destroy myexp
Press any key to continue . . .
不注释掉结果是:
construct mycls
in try
in fun test()
construct myexp
destroy mycls
in catch
destroy myexp
Press any key to continue . . .
*/
};
int main(){
try{
mycls t;
cout<<"in try"<<endl;
test();
cout<<"this will not show in screen !"<<endl;
}catch(myexp){
cout<<"in catch"<<endl;
}
return 0;
}
void test(){
cout<<"in fun test()"<<endl;
throw myexp();
}
// 2,叠代器
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> myvtin;
for(int i = 2; i < 7; i ++)
myvtin.push_back(i);
cout<<"input iterator:";
for(vector<int>::iterator it = myvtin.begin(); it != myvtin.end(); it ++)
cout<<*it<<" ";
cout<<endl;
vector<int> myvtout(5);
vector<int>::iterator itout = myvtout.begin();
*itout++ = 20;
*itout++ = 23;
*itout++ = 25;
*itout++ = 14;
*itout = 27;
cout<<"output iterator:";
for(vector<int>::iterator it = myvtout.begin(); it != myvtout.end(); it ++)
cout<<*it<<" ";
cout<<endl;
vector<int> myvtfw(5);
vector<int>::iterator itfw = myvtfw.begin();
vector<int>::iterator itfwsave = itfw;
for(int i = 7; i < 12; itfw ++,i ++)
*itfw = i;
cout<<"forward iterator:";
for(; itfwsave != myvtfw.end(); itfwsave ++)
cout<<*itfwsave<<" ";
cout<<endl;
/* vector<int> myvtdd(5);
vector<int>::iterator itdd = myvtdd.begin();
for(int i = 9; i < 14; itdd ++,i ++)
*itdd = i;
cout<<"double dest iterator:";
itdd = myvtdd.end()-1;
do {
cout<<*itdd<<" "; // 输出有问题
-- itdd;
if(itdd == myvtfw.begin())
break;
}while(true);
cout<<endl;
*/
vector<int> myvtrd(5);
vector<int>::iterator itrd = myvtrd.begin();
*itrd++ = 23;
*itrd++ = 2;
*itrd++ = 63;
*itrd++ = 73;
*itrd = 93;
cout<<"random iterator:";
cout<<*(itrd - 4)<<" "<<*(itrd-2)<<" ";
itrd -= 3;
cout<<*(itrd++)<<" "<<*(itrd+2)<<endl;
return 0;
}
// 3,多重继承
#include <iostream>
using namespace std;
class base{
public:
base(){
cout<<"base"<<endl;
}
virtual ~base(){
cout<<"~base"<<endl;
}
virtual void test(){}
};
class baseTwo{
public:
baseTwo(){
cout<<"baseTwo"<<endl;
}
virtual ~baseTwo(){
cout<<"~baseTwo"<<endl;
}
};
class derived:public base,public baseTwo{
public:
derived(){
cout<<"derived"<<endl;
}
~derived(){
cout<<"~derived"<<endl;
}
};
int main(){
base *p = new derived;
//cout<<sizeof(base)<<" "<<sizeof(derived)<<endl;
delete p;
return 0;
}
// 4,二义性问题
// 二义性是指,派生类继承多个基类时,基类里有同名的数据成员或者成员函数
// 而派生类里没有该成员,派生类的实例不知道应该用哪个基类的成员,这就是
// 二义性,下面的程序因为存在二义性编译无法通过
#include <iostream>
using namespace std;
class base{
public:
base(){
cout<<"base"<<endl;
}
virtual ~base(){
cout<<"~base"<<endl;
}
void test(){
cout<<"base test()"<<endl;
}
};
class baseTwo{
public:
baseTwo(){
cout<<"baseTwo"<<endl;
}
virtual ~baseTwo(){
cout<<"~baseTwo"<<endl;
}
void test(){
cout<<"baseTwo test()"<<endl;
}
};
class derived:public base,public baseTwo{
public:
derived(){
cout<<"derived"<<endl;
}
~derived(){
cout<<"~derived"<<endl;
}
};
int main(){
derived p;
//cout<<sizeof(base)<<" "<<sizeof(derived)<<endl;
p.test();
return 0;
}
// 5,命名空间
#include <iostream>
using namespace std;
namespace mysp{
int j ;
int i;
}
namespace mysp2{
int j;
int i;
}
using namespace mysp;
using namespace mysp2;
int main(){
// i = 32; //: error C2872: 'i' : ambiguous symbol
printf("%d",mysp::i);
return 0;
}
// 6,文件操作
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(){
// ofstream tfile("file.txt");
// cout<<"create file "<<endl;
// tfile<<"first test"<<str<<endl;
// ofstream afile("file.txt",std::ios::app);
// str += " app file";
// afile << str<<endl;
/* ifstream ifile("file.txt",ios::in | ios::out | ios::binary);
if(ifile.fail())
cout<<"can't open file file.txt"<<endl;
ostream ofile(ifile.rdbuf());
char buf[100];
int i;
for(i = 0;!ifile.eof() && i < sizeof(buf);){
char c;
ifile.get(buf[i++]);//(c);
}
ofile.seekp(0);
for(int j = 0; j < i-1; j ++)
ofile.put(static_cast<char>(toupper(buf[j])));
*/
fstream myfile("file.txt",ios::in | ios::out);
char c;
while(!myfile.eof()){
myfile.get(c);
cout<<c;
}
myfile.seekp(-4,ios::cur);
myfile<<"deng lanzhong hello !"<<endl;
char p[] = {'a','b'};
cout<<sizeof p<<endl;
/*
ofstream ofile("file.txt");
if(ofile.fail())
cout<<"can't open file file.txt"<<endl;
else {
char c;
ofile.seekp(10);
// ofile.getline(c,80);//(c);
// cout<<c<<endl;
// ostream ofile(ofile.rdbuf());
while(!ofile.eof()){
ofile<<"deng test read and write "<<endl;
}*/
return 0;
}
// 7,显示构造函数
#include <iostream>
using namespace std;
class cMytype{
char a;
char b;
public:
cMytype(char c='a',char d='b'):a(c),b(d){}
operator int(){return a+b;}
// 需要强制类型转换
explicit cMytype(int c){ a = 67; b = c - 67; }
// 隐式构造函数 cMytype(int c){ a = 67; b = c - 67; }
void show(){
cout<<a<<' '<<b<<endl;
}
};
int main(){
cMytype c('c');
cMytype t=(cMytype)140;
t.show();
return 0;
}
// 8,虚析够函数
#include <iostream>
using namespace std;
class base{
public:
base(){
cout<<"base"<<endl;
}
virtual ~base(){
cout<<"~base"<<endl;
}
};
class derived:public base{
public:
derived(){
cout<<"derived"<<endl;
}
~derived(){
cout<<"~derived"<<endl;
}
};
int main(){
base *p = new derived; // 如果 base 的析构函数不是虚的则下面删除
// p时不会调用 derived 的析构函数
delete p;
return 0;
}
// 9,异常
#include <stdexcept>
#include <iostream>
#include <typeinfo>
using namespace std;
class test:public runtime_error{
public:
test():runtime_error("test error"){}
};
int main(){
try{
test();
}catch(exception& at){
cout<<at.what();
}
return 0;
}
// 10,有界模版数组
#include <iostream>
#include <cassert>
using namespace std;
template<class T,int max>
class Tmp{
T t[max];
public:
T& operator[](int i){
assert(i >= 0 && i < max);
return t[i];
}
};
int main(){
Tmp<int,10> a;
for(int i = 0; i<=10; i ++) // 导致assert失败
a[i] = i;
//cout<<sizeof(base)<<" "<<sizeof(derived)<<endl;
return 0;
}
// 11,重载
#include <iostream>
using namespace std;
class test{
static int count;
int i;
int j;
public:
test(int a=0,int b=0):i(a),j(b){
count ++;
cout<<"construct test:"<<count<<endl;
}
test(test& t){
count ++;
cout<<"copy construct test:"<<count<<endl;
i = t.i;
j = t.j;
}
~test(){
cout<<"destroy test:"<<count<<endl;
count --;
}
void put();
test& operator=(test& t);
test operator+(test& t)const;
test& operator+=(test& t);
friend int operator+(int a,test& t);
bool operator==(test& t);
bool operator<(test& t);
bool operator>(test& t);
test& operator++();
test operator++(int);
test& operator-();
test& operator+();
friend ostream& operator<<(ostream& out,test&t);
friend istream& operator>>(istream& in,test&t);
int operator[](int i);
};
class ptest{
test *pt;
public:
ptest(test* p=0):pt(p){}
test* operator->(){
static test t(0,0);
if(!pt)
return &t;
else
return pt;
}
};
int test::count = 0;
ostream& operator<<(ostream& out,test&t){
out<<t.i<<" "<<t.j;
return out;
}
istream& operator>>(istream& in,test&t){
in>>t.i>>t.j;
return in;
}
int test::operator[](int i){
if(!i)
return this->i;
else if(i)
return this->j;
return -1;
}
test& test::operator-(){
this->i = - this->i;
this->j = - this->j;
return *this;
}
test& test::operator+(){
return *this;
}
test test::operator++(int){
test temp;
temp = *this;
this->i ++;
this->j ++;
return temp;
}
test& test::operator++(){
this->i ++;
this->j ++;
return *this;
}
void test::put(){
cout<<"i="<<i<<" "<<"j="<<j<<endl;
}
test& test::operator=(test& t){
this->i = t.i;
this->j = t.j;
return *this;
}
test test::operator+(test& t)const{
test nt;
nt.i = this->i + t.i;
nt.j = this->j + t.j;
return nt;
}
bool test::operator==(test&t){
return ( this->i == t.i &&
this->j == t.j );
}
bool test::operator<(test&t){
return (this->i < t.i ||
(this->i == t.i && this->j < t.j));
}
bool test::operator>(test&t){
return t < *this;
}
int operator+(int a,test& t){
return a+t.i+t.j;
}
test& test::operator +=(test &t){
this->i += t.i;
this->j += t.j;
return *this;
}
int main(){
test a(4,4),b(3,29);
ptest p;
a.put();
b.put();
cout<<"test <<:"<<endl;
cout<<a;
cout<<"test >>: enter n m:"<<endl;
cin>>a;
cout<<"after enter a:"<<a<<endl;
// cout<<"test a++"<<endl;
// a ++;
// cout<<"test b = a++"<<endl;/
// b = a ++;
// b.put();
// cout<<"test +:"<<endl;
// +b;
// b.put();
cout<<"test p = &:"<<endl;
p->put();
p = &a;
p->put();
// cout<<"test []:"<<endl;
// cout<<"a[0]:"<<a[0]<<endl;
/* cout<<"test a>b:";
if(a>b){
a.put();
cout<<"is bigger than ";
b.put();
}
else {
b.put();
cout<<"is bigger than ";
a.put();
}
cout<<"test += :"<<endl;
cout<<"a:";
a.put();
cout<<"b:";
b.put();
a += b;
cout<<"after a+=b,a:";
a.put();
*/
return 0;
}
// 12,重载 new
#include <iostream>
#include <new>
#include <cstddef>
#include <cstring>
using namespace std;
const int nameLength = 10;
const int max = 5;
class student{
char name[nameLength];
static char pool[];
static short int bInUse[max];
public:
student(char*str);
student::student(){strcpy(name,"");}
void* operator new(size_t)throw(bad_alloc);
void operator delete(void*)throw();
void* operator new[](size_t size)throw(bad_alloc);
void operator delete[](void*)throw();
void put();
};
char student::pool[max*sizeof(student)];
short int student::bInUse[max];
student::student(char *str){
strncpy(name,str,sizeof(name));
}
void* student::operator new(size_t)throw(bad_alloc){
for(int j = 0; j < max; j ++)
if(!bInUse[j]){
bInUse[j] = true;
return pool+j*sizeof(student);
}
throw bad_alloc();
}
void student::operator delete(void*p)throw(){
if(p)
bInUse[((char*)p-pool)/(sizeof(student))] = false;
}
void* student::operator new[](size_t size)throw(bad_alloc){
int elements = size/sizeof(student);
for(int j = 0; j < max; j ++)
if(!bInUse[j]){
int i;
for(i = 0; i < elements && j+i < max; i ++)
if(bInUse[i])
break;
if(i == elements && j+i <= max){
for(i = 0; i < elements; i ++)
bInUse[j+i] = elements;
return pool+j*sizeof(student);
}
}
throw bad_alloc();
}
void student::operator delete[](void*p)throw(){
if(p){
int j = ((char*)p-pool)/sizeof(student);
int elements = bInUse[j];
for(int i = 0; i < elements; i ++)
bInUse[((char*)p-pool)/(sizeof(student))] = false;
}
}
void student::put(){
cout<<name<<endl;
}
int main(){
student *ps[max];
int i;
for(i = 0; i < max; i ++){
cout<<i<<" enter Name:";
char name[nameLength];
cin>>name;
ps[i] = new student(name);
}
cout<<"you enter followed names:"<<endl;
for(i = 0; i < max; i ++){
ps[i]->put();
delete ps[i];
}
student* psa=new student[max];
for(i = 0; i < max; i ++){
cout<<i<<" enter Name:";
char name[nameLength];
cin>>name;
*(psa + i) = name;
}
cout<<"you enter followed names:"<<endl;
for(i = 0; i < max; i ++)
ps[i]->put();
delete []psa;
return 0;
}
// 13,资源释放
#include <iostream>
using namespace std;
class mycls{
public:
mycls(){
cout<<"construct mycls"<<endl;
}
~mycls(){
cout<<"destroy mycls"<<endl;
}
};
class myexp{
int j;
public:
myexp(int i):j(i){
cout<<"construct myexp"<<endl;
}
myexp(){
cout<<"construct myexp"<<endl;
}
~myexp(){
cout<<"destroy myexp"<<endl;
}
void put(){
cout<<"j:"<<j<<endl;
}
myexp(myexp& t){
j = t.j;
cout<<"copy construct myexp"<<endl;
}
};
class myques{
public:
myques(){
cout<<"construct myques"<<endl;
}
~myques(){
cout<<"destroy myques"<<endl;
}
};
void test()throw(myexp); // 异常情况指定
void myterminate(){// 处理未经捕获的异常函数
cout<<"in myterminate():"<<endl;
}
void myunexpected(){// 处理函数抛出的未经指定的异常 ????
cout<<"in myunexpected():"<<endl;
}
myques *myp; //测试资源的释放
int main()throw(myexp){
set_terminate(myterminate);
set_unexpected(myunexpected);
try{
cout<<"in try"<<endl;
mycls t;
test();
cout<<"this will not show in screen !"<<endl;
}catch(myexp x){
x.put();
cout<<"in catch"<<endl;
}//catch(...){
// cout<<"catch all"<<endl;
// 这个异常不被捕获有 terminate() 处理,最后调用 abort()函数
//}
return 0;
}
void test()throw(myexp){
myp = new myques;
throw myexp();
delete myp;
}
/*
in try
construct mycls
construct myques
construct myexp
copy construct myexp
destroy mycls
j:-858993460
in catch
destroy myexp
destroy myexp
Press any key to continue
*/
// 14,STLbitset
#include <iostream>
#include <iomanip>
#include <bitset>
using namespace std;
void printBit(bitset<20>& bit){
cout<<"Bitset=";
for(int i = 0; i < 20; i ++)
cout<<bit[i];
cout<<endl;
}
void testBit(bitset<20>& bit){
cout<<"test bitset<20> as followed:"<<endl;
for(int i = 0; i < 20; i ++)
if(bit.test(i))
cout<<"bit:"<<setw(2)
<<setiosflags(ios::right)<<i<<" set"<<endl;
else
cout<<"bit:"<<setw(2)
<<setiosflags(ios::right)<<i<<" unset"<<endl;
}
int main(){
bitset<20> mybit;
cout<<"sizeof(mybit):"<<sizeof mybit<<endl;
cout<<"before set:"<<endl;
printBit(mybit);
int j ;
for(int i = 0; i < 4; i ++){
j = rand()%20;
cout<<"set:"<<j<<endl;
mybit.set(j);
}
cout<<"after set:"<<endl;
printBit(mybit);
mybit.reset(j);
cout<<"after reset:"<<j<<endl;
printBit(mybit);
testBit(mybit);
return 0;
}
// 15,STLdeque
#include <iostream>
#include <deque>
using namespace std;
int main(){
/* deque<int> myArray(10,22);
deque<int>::iterator iter;
int i = 0;
for(iter = myArray.begin(); iter != myArray.end(); iter ++)
cout<<"element#"<<i++<<":"<<*iter<<endl;
deque<char> myArray;
deque<char>::iterator iter;
int i = 0;
for(i = 0; i < 6; i ++)
myArray.push_front('a'+ i);
for(i = 0,iter = myArray.begin(); iter != myArray.end(); iter ++)
cout<<"element#"<<i++<<":"<<*iter<<endl;
deque<char> my;
my.insert(my.begin(),20,'a');
deque<char>::iterator iter;
int i = 0;
for(iter = my.begin(); iter != my.end(); iter ++)
cout<<"element#"<<i++<<":"<<*iter<<endl;
my[0] = 'K';
cout<<my[0]<<endl;
deque<int> myArray(2,10);
int i = 0;
for(i = 10; i < 16; i ++)
myArray.push_back(i);
for(i = myArray.size(); i>= 0; i -= 2){
deque<int>::iterator iterT;
for(i = myArray.size(),iterT = myArray.begin(); iterT != myArray.end(); iterT ++)
cout<<*iterT<<" ";
myArray.pop_back();
myArray.pop_front();
cout<<endl;
}
*/
deque<char> myArray1;
int i = 0;
cout<<myArray1.max_size()<<endl;
for(i = 10; i < 16; i ++)
myArray1.push_back(i+'a');
deque<char>::iterator iter;
myArray1.resize(20,'a');
for(iter = myArray1.begin(); iter != myArray1.end(); iter ++)
cout<<*iter<<" ";
cout<<endl;
deque<char> myArray2;
myArray2.assign(myArray1.begin()+2,myArray1.end()-2);
for(iter = myArray2.begin(); iter != myArray2.end(); iter ++)
cout<<*iter<<" ";
return 0;
}
// 16,STLlist
#include <iostream>
#include <list>
using namespace std;
int main(){
/*
list<int> mylist(10,22);
list<int>::iterator iter;
int i = 0;
for(iter = mylist.begin(); iter != mylist.end(); iter ++)
cout<<"element#"<<i++<<":"<<*iter<<endl;
list<char> mylist;
list<char>::iterator iter;
int i = 0;
for(i = 0; i < 6; i ++)
mylist.push_front('a'+ i);
mylist.insert(++mylist.begin(),10,'x');
for(i = 0,iter = mylist.begin(); iter != mylist.end(); iter ++)
cout<<"element#"<<i++<<":"<<*iter<<endl;
*/
list<char> myt;
int i;
for(i = 0; i < 6; i ++)
myt.push_front('a'+ i);
list<char>::iterator iter;
myt.reverse();
for(iter = myt.begin(); iter != myt.end(); iter ++)
cout<<"element#"<<i++<<":"<<*iter<<endl;
return 0;
}
// 17,STLmap
#include <iostream>
#include <map>
using namespace std;
int main(){
map<int,int> mymap;
mymap.insert(map<int,int>::value_type(1,523));
mymap.insert(map<int,int>::value_type(2,23));
mymap.insert(map<int,int>::value_type(3,263));
mymap.insert(map<int,int>::value_type(4,293));
mymap.insert(map<int,int>::value_type(5,1223));
mymap.insert(map<int,int>::value_type(8,23));
mymap[0] = 20;
map<int,int>::iterator iter;
for(iter = mymap.begin(); iter != mymap.end(); iter++)
cout<<iter->first
<<"->"<<iter->second<<endl;
cout<<endl;
cout<<"after erase():"<<endl;
mymap.erase(++mymap.begin());
for(iter = mymap.begin(); iter != mymap.end(); iter++)
cout<<iter->first
<<"->"<<iter->second<<endl;
cout<<endl;
cout<<"find key 7:"<<endl;
if((iter = mymap.find(7))!=mymap.end())
cout<<"I find it ,value is:"<<iter->second<<endl;
else
cout<<"Can't find it"<<endl;
map<int,int> mymap2(mymap.begin(),mymap.end());
mymap2[2] = 100;
cout<<"mymay2 is :"<<endl;
for(iter = mymap2.begin(); iter != mymap2.end(); iter++)
cout<<iter->first
<<"->"<<iter->second<<endl;
if(mymap > mymap2) // 比较这里,比较相同键值的元素
cout<<"mymap > mymap2"<<endl;
else if(mymap == mymap2)
cout<<"mymap = mymap2"<<endl;
else
cout<<"mymap < mymap2"<<endl;
return 0;
}
// 18 ,STLmultimap
#include <iostream>
#include <map>
using namespace std;
typedef multimap<int,char> MYMAP;
int main(){
MYMAP mymap;
mymap.insert(MYMAP::value_type(4,'y'));
mymap.insert(MYMAP::value_type(5,'k')); // 不能使用这种形式:mymap[3] = 'a';
for(int i = 0; i < 8; i ++)
mymap.insert(MYMAP::value_type(i,'h'+i));
MYMAP::iterator iter;
cout<<"mymap as followed:"<<endl;
for(iter = mymap.begin(); iter != mymap.end(); iter++)
cout<<iter->first
<<"->"<<iter->second<<endl;
cout<<endl;
cout<<"after erase():"<<endl;
mymap.erase(mymap.begin());
for(iter = mymap.begin(); iter != mymap.end(); iter++)
cout<<iter->first
<<"->"<<iter->second<<endl;
cout<<endl;
cout<<"find key 4:"<<endl;
if((iter = mymap.find(4))!=mymap.end())
cout<<"I find it ,value is:"<<iter->second<<endl;
else
cout<<"Can't find it"<<endl;
MYMAP mymap2(mymap.begin(),mymap.end());
cout<<"mymay2 is :"<<endl;
for(iter = mymap2.begin(); iter != mymap2.end(); iter++)
cout<<iter->first
<<"->"<<iter->second<<endl;
if(mymap > mymap2) // 比较这里,比较相同键值的元素
cout<<"mymap > mymap2"<<endl;
else if(mymap == mymap2)
cout<<"mymap = mymap2"<<endl;
else
cout<<"mymap < mymap2"<<endl;
return 0;
}
// 19,STLmultiset
#include <iostream>
#include <set>
using namespace std;
int main(){
multiset<int> mymultiset;
mymultiset.insert(20);
mymultiset.insert(24);
mymultiset.insert(24);
mymultiset.insert(24);
mymultiset.insert(24);
mymultiset.insert(24);
mymultiset.insert(2);
mymultiset.insert(111);
mymultiset.insert(88);
mymultiset.insert(26);
mymultiset.insert(mymultiset.begin(),100);
cout<<"The multiset's size is:"<<mymultiset.size()<<endl;
multiset<int>::iterator iter;
for(iter = mymultiset.begin(); iter != mymultiset.end(); iter ++)
cout<<*iter<<" ";
cout<<endl;
mymultiset.erase(++mymultiset.begin());
cout<<"after erase():"<<endl;
for(iter = mymultiset.begin(); iter != mymultiset.end(); iter ++)
cout<<*iter<<" ";
cout<<endl;
cout<<"find(88):"<<endl;
if((iter = mymultiset.find(88)) != mymultiset.end())
cout<<"I find it "<<"next is:"<<*(++iter)<<endl;
else
cout<<"I find not !"<<endl;
cout<<"upper_bound(88):"<<*mymultiset.upper_bound(88)
<<" lower_bound(88):"<<*mymultiset.lower_bound(88) //这两个老是不对劲???
<<endl;
cout<<"count(24):"<<mymultiset.count(24)<<endl;
return 0;
}
// 20 , STLpriority_queue
#include <iostream>
#include <list>
#include <queue>
using namespace std;
int main(){
priority_queue<int,vector<int>,greater<int>> mypq;
mypq.push(20);
mypq.push(24);
mypq.push(2);
mypq.push(111);
mypq.push(88);
mypq.push(26);
cout<<"The priority queue's size is:"<<mypq.size()<<endl;
while(!mypq.empty()){
cout<<mypq.top()<<" ";
mypq.pop();
}
cout<<endl;
return 0;
}
// 21,STL queue
#include <iostream>
#include <list>
#include <queue>
using namespace std;
int main(){
queue<int,list<int>> myqueue;
for(int i = 0; i < 20; i ++)
myqueue.push(i);
cout<<myqueue.back()<<endl;
while(!myqueue.empty()){
cout<<myqueue.front()<<" ";
myqueue.pop();
}
cout<<endl;
return 0;
}
// 22,STL set
#include <iostream>
#include <set>
using namespace std;
int main(){
set<int> myset;
myset.insert(20);
myset.insert(24);
myset.insert(2);
myset.insert(111);
myset.insert(88);
myset.insert(26);
cout<<"The set's size is:"<<myset.size()<<endl;
set<int>::iterator iter;
for(iter = myset.begin(); iter != myset.end(); iter ++)
cout<<*iter<<" ";
cout<<endl;
cout<<"after erase():"<<endl;
myset.erase(++myset.begin());
for(iter = myset.begin(); iter != myset.end(); iter ++)
cout<<*iter<<" ";
cout<<endl;
cout<<"find(88):"<<endl;
if((iter = myset.find(88)) != myset.end())
cout<<"I find it !"<<endl;
else
cout<<"I find not !"<<endl;
cout<<"upper_bound(88):"<<*myset.upper_bound(88)
<<" lower_bound(88):"<<*myset.lower_bound(88)<<endl;
//不对哦这里: 111 88 应该是 111 26 吧 ???
return 0;
}
// 23,STL stack
#include <iostream>
#include <list>
#include <stack>
using namespace std;
int main(){
stack<int,list<int>> mystack;
for(int i = 0; i < 20; i ++)
mystack.push(i);
while(!mystack.empty()){
cout<<mystack.top()<<" ";
mystack.pop();
}
return 0;
}
// 24 ,STL vector
#include <iostream>
#include <vector>
using namespace std;
int main(){
/* vector<int> myArray(10,22);
vector<int>::iterator iter;
int i = 0;
for(iter = myArray.begin(); iter != myArray.end(); iter ++)
cout<<"element#"<<i++<<":"<<*iter<<endl;
vector<char> myArray;
vector<char>::iterator iter;
int i = 0;
for(i = 0; i < 6; i ++)
myArray.push_back('a'+ i);
for(i = 0,iter = myArray.begin(); iter != myArray.end(); iter ++)
cout<<"element#"<<i++<<":"<<*iter<<endl;
vector<char> my;
for(i = 0; i < 6; i ++)
my.push_back('A'+ i);
for(i = 0,iter = my.begin(); iter != my.end(); iter ++)
cout<<"element#"<<i++<<":"<<*iter<<endl;
vector<int> myArray;
vector<int>::iterator iter;
int i = 0;
for(i = 0; i < 6; i ++)
myArray.push_back(i);
iter = myArray.begin();
iter ++;
myArray.insert(iter++,10,100);
for(i = 0,iter = myArray.begin(); iter != myArray.end(); iter ++)
cout<<"element#"<<i++<<":"<<*iter<<endl;
vector<int> myArray(2,10);
vector<int>::iterator iter;
int i = 0;
for(i = 10; i < 16; i ++)
myArray.push_back(i);
// ??? for(iter = myArray.begin(); iter != myArray.end(); iter ++)
for(i = myArray.size(); i>= 0; i --){
vector<int>::iterator iterT;
for(i = myArray.size(),iterT = myArray.begin(); iterT != myArray.end(); iterT ++)
cout<<*iterT<<" ";
cout<<endl;
// myArray.pop_back();
myArray.erase(myArray.begin());
}
*/
vector<char> myArray1;
vector<char> myArray2;
vector<char>::iterator iter;
int i = 0;
for(i = 10; i < 16; i ++)
myArray1.push_back(i+'a');
for(i = myArray1.size(),iter = myArray1.begin(); iter != myArray1.end(); iter ++)
cout<<*iter<<" ";
cout<<endl;
for(i = 10; i < 16; i ++)
myArray2.push_back(i+'a');
for(i = myArray2.size(),iter = myArray2.begin(); iter != myArray2.end(); iter ++)
cout<<*iter<<" ";
cout<<endl;
if(myArray1 > myArray2)
cout<<"up bigger down"<<endl;
else if(myArray1 < myArray2)
cout<<"up smaller down"<<endl;
else
cout<<"up equal down"<<endl;
return 0;
}
// 25,特殊叠代器
#include <iostream>
#include <vector>
#include <numeric>
#include <algorithm>
using namespace std;
void show_val(int a){
cout<<a<<" ";
}
int main(){
vector<int> myvt;
cout<<"enter five integers:";
for(int i = 0;i < 5; i ++)
//输入流跌代器
myvt.push_back(*istream_iterator<int>(cin));
cout<<"use istream_iterator you enter is :";
for_each(myvt.begin(),myvt.end(),show_val);
cout<<endl;
cout<<"use ostream_iterator partial_sum is :";
//输出流跌代器
partial_sum(myvt.begin(),myvt.end(),ostream_iterator<int>(cout));
cout<<endl;
//跌代器适配器
cout<<"use rbegin() and rend():";
for_each(myvt.rbegin(),myvt.rend(),show_val);
cout<<endl;
//插入跌代器 对应容器中的 push_back,push_front 等
back_insert_iterator<vector<int>> binit(myvt);
*binit++ = 1000;
*binit++ = 10000;
*binit = 100000;
cout<<"use back_insert_iterator():"<<endl;
for_each(myvt.begin(),myvt.end(),show_val);
cout<<endl;
return 0;
}
// 自定义谓词
#include <iostream>
#include <map>
using namespace std;
class mycompare{
public:
bool operator()(const int a,const int b)const{
cout<<"compare:"<<a<<" "<<b<<endl;
return a>b;
}
};
int main(){
map<int,int,mycompare> mymap;
mymap.insert(map<int,int>::value_type(1,523));
mymap.insert(map<int,int>::value_type(2,23));
mymap.insert(map<int,int>::value_type(3,263));
mymap.insert(map<int,int>::value_type(8,23));
mymap[0] = 20;
map<int,int,mycompare>::iterator iter;
for(iter = mymap.begin(); iter != mymap.end(); iter++)
cout<<iter->first
<<"->"<<iter->second<<endl;
cout<<endl;
cout<<"after erase():"<<endl;
mymap.erase(++mymap.begin());
for(iter = mymap.begin(); iter != mymap.end(); iter++)
cout<<iter->first
<<"->"<<iter->second<<endl;
cout<<endl;
cout<<"find key 7:"<<endl;
if((iter = mymap.find(7))!=mymap.end())
cout<<"I find it ,value is:"<<iter->second<<endl;
else
cout<<"Can't find it"<<endl;
map<int,int,mycompare> mymap2(mymap.begin(),mymap.end());
mymap2[2] = 100;
cout<<"mymay2 is :"<<endl;
for(iter = mymap2.begin(); iter != mymap2.end(); iter++)
cout<<iter->first
<<"->"<<iter->second<<endl;
if(mymap > mymap2) // 比较这里,比较相同键值的元素
cout<<"mymap > mymap2"<<endl;
else if(mymap == mymap2)
cout<<"mymap = mymap2"<<endl;
else
cout<<"mymap < mymap2"<<endl;
return 0;
}
/////////////////////////////////
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
#define OUTPUT(p) { cout<<#p<<":"<<p<<endl; }
class Test{
public:
// 默认构造函数
Test():a(0){ cout<<"function:Test():a(0)"<<endl; }
// 带参数的普通构造函数
Test(int i):a(i){ cout<<"function:Test(int i):a(i)"<<endl; }
// 拷贝构造函数
Test(const Test& other):a(other.a){
cout<<"function:Test(const Test& other):a(other.a)"<<endl;
}
// 重载输出运算符函数
friend ostream& operator<<(ostream& out,const Test& t){
out<<t.a<<endl;
out<<"friend ostream& operator<<(ostream& out,const Test& t)"<<endl;
return out;
}
// 重载前缀自增运算符函数
Test& operator++(){ // prefix
cout<<"function:Test& operator++()"<<endl;
a++;
return *this;
}
// 重载后缀自增运算符函数
Test operator++(int){ //postfix
cout<<"function:Test operator++(int)"<<endl;
Test tp(*this);
a++;
return tp;
}
// 重载赋值运算符函数
Test& operator=(Test& other){
cout<<"function:Test& operator=(Test& other)"<<endl;
a = other.a;
return *this;
}
// 强制类型转换
operator int(void){ return a; };
private:
int a;
};
int main(){
cout<<"Test first(23)"<<endl;
Test first(23);
OUTPUT(first);
cout<<"Test temp(first)"<<endl;
Test temp(first);
OUTPUT(temp);
cout<<"temp=++first"<<endl;
temp=++first;
OUTPUT(temp);
OUTPUT(first);
cout<<"Test equal"<<endl;
Test equal;
OUTPUT(equal);
cout<<"equal=first++"<<endl;
equal=first++;
OUTPUT(first);
OUTPUT(equal);
int t=-1;
t = (int)equal;
cout<<"int t=-1"<<endl
<<"t = (int)equal"<<endl
<<"t="<<t<<endl;
return 0;
}
评论