C++第5章 STL应用

//STL有三大核心部分,容器(Container)、算法(Algorithms)、迭代器(Iterator),容器适配器(container adaptor,函数对象(functor),除此之外还有其他STL其他标准组件。通俗讲:

//容器:就像装东西的容器,STL里的容器,是可容纳一些数据的模板类。

//算法:就是容器里的东西。STL里的算法,就是处理容器里面数据的方法。

//迭代器:是容器的管理员。STL里的迭代器:用来遍历容器中数据对象。对存储于容器的数据进行处理时,迭代器能从一个成员移向另一个成员。它能按预先定义的顺序在某些容器中的成员间移动。


//STL简介

//STLStandard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。现在虽说它主要在C++中。但在被引入C++之前,该技术就已经存在了很长时间了。

//C++标准库中,STL被组织为下面13个头文件:


//1#include <algorithm>   算法

//2#include <deque> 双端队列容器

//3#include <functional>     运算函数(代替运算符)

//4#include <iterator>       向量

//5#include <vector>      动态数组容器

//6#include <list>     STL 线性列表容器

//7#include <map>      STL映射容器

//8#include <memory>     给容器、管理内存的函数和auto_ptr模板类定义标准内存分配器

//9#include <numeric>   在数值序列上定义一组一般数学操作。

//10#include <queue>      队列容器

//11#include <set>       集合容器

//12#include <stack>     堆栈容器

//13#include <utility>      通用模板类



字符串

#include <iostream>
//string类简介
//C++兼容C对字符串的处理方式,与此同时还在标准库(STL)中提供了string类,可以很容易的使用string类对字符传进行操作。
//先引入头文件
#include <string>
using namespace std;
int main(int argc, const char * argv[])
{
    //字符串初始化
    string name = "jiaoshenmene";
                                                                                                                                                        
    //字符串赋值
    string str2;
    str2.assign("xiaonan");
    cout<<str2<<endl;
                                                                                                                                                        
    //字符串处理  字符串拼接
    name += str2;
    cout<<name<<endl;
                                                                                                                                                        
    //字符串长度
    cout<<"字符串长度 = "<<name.length()<<endl;
                                                                                                                                                        
                                                                                                                                                        
    return 0;
}


代码下载地址: http://pan.baidu.com/share/link?shareid=1247823885&uk=3189484501




向量

1、向量的初始化方式:

#include <iostream>
using namespace std;
//向量
//需要加头文件#include <vector>  vector 是一种动态数组,是基本数组的类模板。其内部定义了很多基本操作。既然这是一个类,那么它就会有自己的构造函数。vector类中定义了4种构造函数:
//1、默认构造函数,构造一个初始长度为0的空向量,例如:vector<int> v1;
//2、形式例如:vector<int> v2(5,10);  意思是向量中有5个元素。数值为10;
//3、形式例如:vector<int> v3(v2);  将向量v2复制到v3
//4、形式例如:vector<int> v4(ar,ar+3);第一个参数:数组开始的位置,第二个参数数组结束的位置
#include <vector>
int main(int argc, const char * argv[])
{
                                                                                                            
    //第一种初始化方式
    vector<int> v1;
                                                                                                              
                                                                                                              
    //第二种初始化方式
    vector<int> v2(5,10);
    cout<<v2.size()<<endl;
                                                                                                              
    //第三种初始化的方式
    vector<int> v3(v2);
    cout<<v3.size()<<endl;
                                                                                                              
                                                                                                              
    //第4中初始化方式
    int ar[3] = {12,43,54};
    vector<int> v4(ar,ar+3);
    for (int i = 0; i <3; i++)
    {
        cout<<v4[i]<<endl;
    }
                                                                                                              
    return 0;
}


代码下载地址:http://pan.baidu.com/share/link?shareid=3742353952&uk=3189484501



2、向量主要成员函数的使用:

#include <iostream>
#include <vector>
using namespace std;
int main(int argc, const char * argv[])
{
    //初始化一个空的向量对象 v1
    vector<int> v1;
    //初始化一个向量对象 其内容包含10个元素,值为6;
    vector<int> v2(10,6);
                                                                             
    //利用复制初始化方式,将向量v2中从开始的数值到第三个数值复制给v3.
    vector<int> v3(v2.begin(),v2.begin() + 3);
                                                                             
    //显示v3中的数据
    for (int i =0; i < v3.size(); i++)
    {
        cout<<v3[i]<<endl;
    }
    cout<<"----------"<<endl;
    //添加数据的方法
                                                                             
    v3.push_back(2);
    //下面的循环要4次,因为刚才添加了一个新的数据2 在最后
    for (int i =0; i < v3.size(); i++)
    {
        cout<<v3[i]<<endl;
    }
    cout<<"----------"<<endl;
    v3.insert(v3.begin(), 4);
                                                                             
    for (int i =0; i < v3.size(); i++)
    {
        cout<<v3[i]<<endl;
    }
      cout<<"----------"<<endl;
                                                                           
    //取向量值的方法
                                                                             
    cout<<"取第一个成员 = "<<v3.front()<<endl;
    cout<<"取最后一个成员 = "<<v3.back()<<endl;
    cout<<"取指定位置的成员,这里取第3个  = "<<v3.at(3)<<endl;
                                                                             
     cout<<"----------"<<endl;
    //删除成员
    v3.pop_back(); // 将最后一个成员移除
    v3.erase(v3.begin() + 1, v3.end());//删除成员  第一个参数指定开始位置  第二个参数结束的位置。
    for (int i =0; i < v3.size(); i++)
    {
        cout<<v3[i]<<endl;
    }
    cout<<"----------"<<endl;
    //赋值函数  这里我们又重新给v3赋值了。
    v3.assign(3, 2);
    for (int i =0; i < v3.size(); i++)
    {
        cout<<v3[i]<<endl;
    }
                                                                             
    return 0;
}


2、向量主要成员函数的使用代码下载地址:http://pan.baidu.com/share/link?shareid=312142971&uk=3189484501



队列

using namespace std;
//队列是一种先进先出的排列,使用时需要包含头文件
#include <queue>
int main(int argc, const char * argv[])
{
    deque<int> deq1;//初始化一个空队列
                
    //给队列赋值  队列中有5个值为6的成员
    deq1.assign(5, 6);
    cout<<"显示队列中的数据--------------------"<<endl;
    //显示队列中的数据
    for (int i = 0;i < deq1.size(); i++)
    {
        cout<<deq1[i]<<endl;
    }
                
                
    cout<<"在队列的尾部加入数据--------------------"<<endl;
                
    //在队列的尾部加入数据
    deq1.push_back(4);
                
    //显示队列中的数据
    for (int i = 0;i < deq1.size(); i++)
    {
        cout<<deq1[i]<<endl;
    }
    cout<<"在队列头部加入数据--------------------"<<endl;
                
    //在队列头部加入数据
    deq1.push_front(9);
                
    //显示队列中的数据
    for (int i = 0;i < deq1.size(); i++)
    {
        cout<<deq1[i]<<endl;
    }
    cout<<"在队列中指定的位置加入数据--------------------"<<endl;
                
                
    //在队列中指定的位置加入数据,其中deq1.begin()代表队列的开始,
    deq1.insert(deq1.begin()+ 1,7);
    //显示队列中的数据
    for (int i = 0;i < deq1.size(); i++)
    {
        cout<<deq1[i]<<endl;
    }
    cout<<"从队列尾部删除--------------------"<<endl;
                
    //删除方法
    //从队列尾部删除
    deq1.pop_back();
    //显示队列中的数据
    for (int i = 0;i < deq1.size(); i++)
    {
        cout<<deq1[i]<<endl;
    }
    cout<<"从队列的头部删除--------------------"<<endl;
                
    //从队列的头部删除
    deq1.pop_front();
    //显示队列中的数据
    for (int i = 0;i < deq1.size(); i++)
    {
        cout<<deq1[i]<<endl;
    }
    cout<<"在队列中删除指定位置的数据--------------------"<<endl;
                
                
    //在队列中删除指定位置的数据
    deq1.erase(deq1.begin() +1);
    //显示队列中的数据
    for (int i = 0;i < deq1.size(); i++)
    {
        cout<<deq1[i]<<endl;
    }
    cout<<"--------------------"<<endl;
    return 0;
}


代码下载: http://pan.baidu.com/share/link?shareid=222282222&uk=3189484501



链表



#include <list>
#include <iterator>
using namespace std;
//List (链表),是一种双线性列表,只能顺序访问(从前向后或者从后向前),使用时需
int main(int argc, const char * argv[])
{
                                                               
                                                               
    list<int> list1,list2;
    list<int> ::iterator listIterator;
    list1.push_back(123);
    list1.push_back(23);
     cout<<"查看数据-------------"<<endl;
    for (listIterator = list1.begin(); listIterator != list1.end(); ++listIterator)
    {
        cout<<*listIterator<<endl;
    }
                                                               
    cout<<"排序后-------------"<<endl;
                                                               
    //sort()排序
    list1.sort();
    for (listIterator = list1.begin(); listIterator != list1.end(); ++listIterator)
    {
//使用遍历器方式,*listIterator是指针间接形式,它的意思是it所指向的元素值。
        cout<<*listIterator<<endl;
    }
    list2.push_back(54);
    list2.push_back(34);
   // list1.merge(list2);
    //链表并接   第一个参数的意思是拼接的位置list1.end()指的是将list2接到list1的尾部
    list1.splice(list1.begin(), list2);
    cout<<"拼接后-------------"<<endl;
    for (listIterator = list1.begin(); listIterator != list1.end(); ++listIterator)
    {
        cout<<*listIterator<<endl;
    }
                                                               
                                                               
    return 0;
}



代码下载:  

http://pan.baidu.com/share/link?shareid=812483902&uk=3189484501



本文出自 “7087095” 博客,请务必保留此出处http://7097095.blog.51cto.com/7087095/1227349

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杜甲同学

感谢打赏,我会继续努力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值