码迷,mamicode.com
首页 > 其他好文 > 详细

STL容器用法详解及注解(持续更新)

时间:2018-09-23 13:42:32      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:返回   添加   ios   清空   软件库   order   保存   empty   put   

写在前面

以下摘录自wiki

STL又称标准模板库,是一个c++软件库,其中包含4个组件,分别为:

  • 算法
  • 容器
  • 函数
  • 迭代器

STL将“在数据上的操作”与“要执行操作的数据分开”,分别以如下概念指代:

  • 容器:包含、放置数据的地方。
  • 迭代器: 在容器中指出一个位置、或成对使用以划定一个区域,用来限定操作所涉及到的数据范围。
  • 算法: 要执行的操作。

总而言之,STL在编程的方方面面都有着巨大的作用,接下来将介绍常用的STL以及用法。

容器

Vector向量容器

Vector向量容器可在尾端插入或者删除元素,可动态调整所占用的内存空间,可以将其看作是以顺序结构实现的线性表。vector可以保存任意类型的变量,包括用户自定义的数据类型。

包含头文件

#include <vector>

定义

vector<T> vec ;

增加或者删除元素

  • vec.push_back(elem) –增加元素到vector容器的尾端
  • vec.pop_back(elem) –删除尾端元素
  • vec.insert(it,elem) –在迭代器it指向的元素前插入某一元素
  • vec.insert(it,n,elem) –在迭代器it指向的元素前插入n个元素
  • vec.erase(it) –删除迭代器it指向的元素
  • vec.erase(begin_it,end_it) –删除区间 [begin_it,end_it) 的元素
  • vec.clear() –清空全部元素

访问元素

  • vec[i] –访问索引值为i的元素
  • vec.front() –返回vec第一个元素
  • vec.back() –返回vec最后一个元素

获取当前长度或者当前容量

  • vec.size() –返回vec当前的长度
  • vec.empty() –若为空返回true否则为false

迭代器

  • vector<T>::iterator it –定义一个T数据类型的正向迭代器it
  • Vector<T>::reverse_iterator it –定义一个T数据类型的反向迭代器it

使用举例

#include <iostream>
#include <vector>

//STL组件属于std名称空间,以下不再赘述
using namespace std ;

int main(){
    cout << "enter the number of element:" << endl ;
    int num ;
    cin >> num ;
    if ( num == 0 ){
        cout << "please enter again" << endl ;
        cin >> num ;
    }

    //定义一个数据类型为 int 的 vector 容器 vec
    vector<int> vec ;
    for ( int i = 0 ; i < num ; i ++ ){
        cout << "input: " ;
        int number ;
        cin >> number ;
        //将元素添加至表尾
        vec.push_back(number) ;
    }

    //定义一个正向迭代器 it
    vector<int>::iterator it ;
    //定义一个反向迭代器 rit
    vector<int>::reverse_iterator rit ;
    cout << endl << "output:" << endl ;
    //正向输出
    cout << "in order: " << endl ;
    for ( it = vec.begin() ; it != vec.end() ; it ++ ){
        cout << *it << " " ;
    }
    cout << endl ;
    //反向输出
    cout << "reverse order: " << endl ;
    for ( rit = vec.rbegin() ; rit != vec.rend() ; rit ++ ){
        cout << *rit << " " ;
    }
    cout << endl << endl ;

    //插入操作
    cout << "insert:(position , element)" << endl ;
    int pos , element ;
    cin >> pos >> element ;
    if ( pos < 0 || pos > vec.size() ){
        cout << "please enter position again" << endl ;
        cin >> pos ;
    }
    vec.insert(vec.begin() + pos , element) ;
    cout << "there are *" << vec.size() << "* numbers now" << endl ;
    cout << "output:" << endl ;
    for ( it = vec.begin() ; it != vec.end() ; it ++ ){
        cout << *it << " " ;
    }
    cout << endl << endl ;

    //删除操作
    cout << "erase:(begin , end)" << endl ;
    int first , last ;
    cin >> first >> last ;
    if ( first < 0 || last > vec.size() ){
        cout << "please enter again" << endl ;
        cin >> first >> last ;
    }
    vec.erase(vec.begin() + first , vec.begin() + last) ;
    if ( !vec.empty() ){
        cout << "there are *" << vec.size() << "* numbers now" << endl ;
        for ( it = vec.begin() ; it != vec.end() ; it ++ ){
            cout << *it << " " ;
        }
    }else{
        cout << "the vector is empty now!" << endl ;
    }
    cout << endl ;
    return 0 ;
}

写在最后

本篇文章进行过程中参考了大量资料,对wiki贡献者以及各博主对天性愚钝的我给予知识上的补充表示深深的感谢。

STL容器用法详解及注解(持续更新)

标签:返回   添加   ios   清空   软件库   order   保存   empty   put   

原文地址:https://www.cnblogs.com/Cantredo/p/9692313.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!