您的位置:首页 > 其它

STL学习

2014-04-10 18:24 302 查看
#include <vector>

#include <iostream>

#include <string>

using namespace std;

int main(void)

{

vector<string> vec;

vector<string>::const_iterator cit;

vec.push_back("dog");

vec.push_back("cat");

vec.push_back("fish");

for (cit=vec.begin();cit!=vec.end();cit++)

{

cout<<(*cit)<<endl;

}

return 0;

}

这是一个简单的vector例子,通过一个泛型vector<string>利用对象的puch_back()方法进行添加元素。利用一个迭代器进行迭代遍历向量中的元素依次输出其中的元素!

迭代器是容器和算法得以泛化的关键,它是指针的一个泛化封装类,指向进行迭代的元素。C++通过这种将指针封装成类的方法,还可以见于安全指针或引用,解决了对象释放所引发的错误指向问题。容器的成员函数和算法均是使用迭代器取得操作数据,迭代器使得容器和算法可以分离开实现。

#include <algorithm>

#include <vector>

#include <iostream>

using namespace std;

int main(void)

{

vector<int> v;



v.push_back(2);

v.push_back(4);

v.push_back(8);

vector<int>::iterator result=find(v.begin(),v.end(),8);

cout<<*result<<endl;

return 0;

}

result作为一个迭代器,迭代器是指针的封装,所以查找得到的结果是一个指针,通过解指针得到指针对应的值。

双端队列deque的学习

#include <deque>

#include <iostream>

#include <string>

using namespace std;

int main(void)

{

deque<string> stb;

deque<string>::iterator ditb,dend;

stb.push_back("2008");

stb.push_back("北京");

stb.push_back("奥运会");



dend=stb.end();

for (ditb=stb.begin();ditb!=dend;++ditb)

{

cout<<*ditb;

}

cout<<endl;

deque<string>::reverse_iterator rditb,rdend;

rdend=stb.rend();

for (rditb=stb.rbegin();rditb!=rdend;++rditb)

{

cout<<*rditb;

}

cout<<endl;

return 0;

}

后面调用了reverse_iterator进行反循环遍历,用rbegin()和rend函数进行操作。

list双向链表

#include <list>

#include <iostream>

using namespace std;

struct student

{

char* name;

int age;

char* city;

char* tel;

};

int main(void)

{

student s[]={

{"浮浮",18,"北京市","123"},

{"sdsl",18,"dflsd","fdf"},

{"sds",17,"dsds","dfdf"},

{"sds",19,"dfdf","dfdf"}



};

list<student> ls;

ls.push_back(s[0]);

ls.push_back(s[1]);

ls.push_back(s[2]);

ls.push_back(s[3]);

list<student>::iterator i,iend;

iend=ls.end();

cout<<"姓名 年龄 城市 电话"<<endl;

for (i=ls.begin();i!=iend;++i)

{

cout<<(*i).name<<" ";

cout<<(*i).age<<" ";

cout<<(*i).city<<" ";

cout<<(*i).tel<<" "<<endl;

}

cout<<"-----------------"<<endl<<endl;

return 0;

}

其中还有unique函数可以将连续的重复的元素删除。

SList单链表

#include <slist>

#include <iostream>

using namespace std;

int main(void)

{

slist<int> sl;

slist<int>::iterator iLast =sl.previous(sl.end());

iLast =sl.insert_after(iLast,61);

sList<int>::iterator i;

for (i=sl.begin();i!=sl.end();++i)

{

cout<<*i<<endl;

}

cout<<endl;

return 0;

}

不过这个需要加入STL的库文件!STLport.org可以下载!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: