通用算法简介

vector向量模板类能够称为容器。c++的容器只能存放一种类型的变量和对象。可是这些容器的容量能够随着须要变大或者缩小。ios

--------------------c++

假设c是vector 要删除c中的某个元素算法

c.erase(n);n不能用整数,必须是迭代器;不然就会报错,不过能够这样c.erase(c.begin()+n);数组

-------------------------函数

1。序列的各种

STL处处可见容器的概念,常见的stl序列容器有六种。spa

deque 双向队列,能够在队列两端自由删除和增长元素。  double end queue.net

list:单向链表。指针

queue: 队列,只能删除第一个元素,而且只能在最后位置插入元素的结构。  // 在queue中不存在插队的状况,不能删除最后一个元素?htm

priority_queue: 优先队列,能够保证队列中的元素始终保持有序。对象

stack: 栈

vector: 向量,能够放置任何数据类型的容器

以上列举的都是序列,序列的一个基本特征是能在序列中添加元素和删除元素。

 

2.auto_ptr类的使用

auto_ptr是一个模板类,用于管理动态内存分配的用法,auto_ptr是一种智能指针,智能指针是这样一种类,它的对象特征相似于指针,它同时是一个类,所以它能够修改或扩充简单指针的行为。

auto_prt自动回收分配的内存功能和使用new 关键字分配内存不能自动回收的状况。

3. Vector

C++ vector的用法小结_C 语言_脚本之家
http://www.jb51.net/article/44234.htm

std::vector的几种遍历方式比较 - ls306196689的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/ls306196689/article/details/35787955

STL基础5:vector容器的使用总结 - 烂笔头的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/longhuahaha/article/details/8373505

STL——for_each的用法 - - 博客频道 - CSDN.NET
http://blog.csdn.net/lalor/article/details/7746505

 

#include <iostream>
#include <vector>
#include<algorithm> //由于要用到排序算法,因此要添加此头文件。 
using namespace std;

template<typename T>
void showVec(vector<T> vec){
    for(int i=0;i<vec.size();i++){ 
        //下面之因此能够用[],是由于向量的模板类中重载了[]运算符。
        cout<<vec[i]<<" ";//这里其实有点小bug,可能T类型并无重载<<运算符
    }
    cout<<endl;
}

int main(){
    std::vector<int> vec;
    for(int i=0;i<10;i++){
        vec.push_back(i);
    }
   
    for(int i=0;i<vec.size(); i++){
        cout<<vec[i]<<" ";
    }

 

    //向量迭代器的定义和使用  iterator自己是在vector<>里用typedef定义的一个类型,而不是一个字段。
    //typedef的类型定义也是有做用域的,因此下面iterator前有std::vector<int>::
    std::vector<int>:: iterator iter;  //iterator是一个复合数据类型

    //向量中begin和end函数分别返回的是向量的第一个元素以及最后一个元素的后一位的元素的迭代器。
    //迭代器能够理解为一个指针。具备指针的一切特性。
    //这也是为何能够对begin()函数的返回值加一个整型数。

    //若是说指针是个简单的地址指向,那么迭代器可能 说是复杂的地址指向,不只能够指向其余元旦,而本身自己也是个类对象。


    for(iter=vec.begin();iter<vec.end();iter++){   //写的时候尽可能使用!=比较迭代器,由于对于不少非随机迭代器不支持<这个操做符。
        //像endl、hex、oct等一系统用在cout语句中的符号本质上都是函数,但它们不局限于某个类,是自由函数。
        //endl的定义实质上是一个实例化的模板函数,或者称为隐式实例化的模板函数。
        cout<<*iter<<std::endl; 
    }

    int ar[]={2,3,6,78};
    std::copy(ar,ar+4,vec.begin());  //copy是用ar数组的值覆盖从vec开头指定长度的数据。
       
    vec.pop_back();

    //调用通用算法对vector进行排序。
    std::sort(vec.begin(),vec.end());  //注意虽然endb函数并非指向vector最后一个元素,但第二个参数用的还是end.

    showVec(vec);
    //在vec的开头插入12
    vec.insert(vec.begin(),12);
    showVec(vec);
    vec.insert(vec.begin()+3,2,0);
    showVec(vec);
    //vec.begin()指向第一个元素,下面的语句将第4个到第7个元素复制到从第5个元素开始的位置,并将原来的第5个元素及后面相应的元素接在后面。
    vec.insert(vec.begin()+4,vec.begin()+3,vec.begin()+6);  //不能直接像数组同样用整数下标。
    showVec(vec);

    vec.clear();
    showVec(vec);
    //char ch;
    //ch=cin.get();               //或者cin.get(ch);
    //cin>>noskipws>>input[j];//不想略过空白字符,那就使用 noskipws 流控制
    cin.get();  //这种状况用于使控制台窗口停住或接收多余的空字符。
    return 0;
}

4.copy函数

//int ar[6]={……}    vector<int>::iterator pv;

std::copy(ar,ar+5,pv);   //将ar数组的内容拷贝到pv迭代器指向的容器中。

相关文章
相关标签/搜索