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可以下载!
#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可以下载!
相关文章推荐
- Windows窗口的创建
- 我总幻想着
- c++函数重载
- Hadoop学习笔记(5) MapReduce工作机制
- 将子查询重写为联合
- ubuntu 添加应用到Dash启动器
- Hadoop学习笔记(5)———Mapreduce工作原理
- linux下tar命令解压到指定的目录
- css负边距自适应布局
- ASP.NET 应用程序安全
- 黑马程序员 java IO PrintWriter BufferedReader 读取键盘 写操作
- JS中生成与解析JSON
- 拨开O2O闭环迷雾 透视BAT终极PK战
- 服务器端mvc框架是怎样接收请求的?
- 单向链表归并排序 Java
- IOS自带正则表达式NSPredicate的使用
- JS中生成与解析JSON
- wxstring与其他类型转换
- 图片双缓冲
- net-snmp在Linux下的安装过程【转】