STL学习

#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可以下载!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值