#include <iostream>
#include <stdlib.h>
#include <list>
#include <vector>
using namespace std;
int main(int argc, char *argv[])
{
list<int> mylist;
list<int>::iterator it;
// set some initial values:
for (int i=1; i<=5; i++) mylist.push_back(i); // 1 2 3 4 5
it = mylist.begin();
++it; // it points now to number 2 ^
mylist.insert (it,10); // 1 10 2 3 4 5
// "it" still points to number 2 ^
mylist.insert (it,2,20); // 1 10 20 20 2 3 4 5
--it; // it points now to the second 20 ^
vector<int> myvector (2,30);
mylist.insert (it,myvector.begin(),myvector.end());
// 1 10 20 30 30 20 2 3 4 5
// ^
cout << "mylist contains:";
for (it=mylist.begin(); it!=mylist.end(); it++)
cout << " " << *it;
cout << endl;
list<int> mlist;
mlist.insert (mlist.begin(),mylist.rbegin(),mylist.rend());
// 1 10 20 30 30 20 2 3 4 5
// ^
cout << "mylist contains:";
for (it=mlist.begin(); it!=mlist.end(); it++)
cout << " " << *it;
cout << endl;
system("PAUSE");
return 0;
}
改代码在DEV-C++中科顺利通过,但是在VC中编译时会出现errorC2664的错误,原因在于mlist.insert (mlist.begin(),mylist.rbegin(),mylist.rend());这一行,VC++中的rbegin与标准C++的还是有区别的,当然利用VC的反向iterator或者在标准范围内亦可解决问题。
code learning
#include <iostream>
#include <stdlib.h>
#include <list>
#include <iterator>
#include <algorithm>
#include <string>
using namespace std;
struct Person{
string name;
string add;
Person(const string &_name,const string &_add):name(_name),add(_add){}
};
class My_less{
public:
inline
bool operator()(const Person *p1,const Person *p2)const{
return p1->name<p2->name;
}
};
int main(int argc, char *argv[]){
Person *p1=new Person("ddd","shanghai");
Person *p2=new Person("bbb","nanjing");
Person *p3=new Person("ccc","wuhan");
list<Person*> coll;
list<Person*>::iterator it;
coll.push_back(p1);
coll.push_back(p2);
coll.push_back(p3);
for(it=coll.begin();it!=coll.end();++it){
cout<<(*it)->name<<" "<<(*it)->add<<endl;
}
coll.sort(My_less());
cout<<"-------"<<endl;
for(it=coll.begin();it!=coll.end();++it){
cout<<(*it)->name<<" "<<(*it)->add<<endl;
}
for(int u =0; u <5; ++u){
int x = u;
cout<< " u = "<<u<< " x = "<<x<<endl;
}
system("PAUSE");
return 0;
}