zoukankan      html  css  js  c++  java
  • C++ 中vector的基本用法

    //在网上看了好久,自己总结了一下下,第一篇博客,呼呼,学到不少

    基本概念

    vector容器是一个模板类,可以存放任何类型的对象)。vector对象可以在运行时高效地添加元素,并且vector中元素是连续存储的。

    1、定义和初始化

    * vector< 类型名 > 标识符 (n)   //定义容器大小为n 

    *   vector< 类型名 > 标识符(最大容量,初始所有值);

    eg: vector< int > ivec( 10, -1 ); 定义了 ivec 它包含十个int型的元素 每个元素都被初始化为-1

    *   vector<类型名> vector<typeName>v2(v1);    或v2=v1;或vector<typeName> v2(v1.begin(), v1.end());

    //v2是v1的一个副本,若v1.size()>v2.size()则赋值后v2.size()被扩充为v1.size()。

    *   拷贝数组中的元素:int a[ 6 ] = { -2, -1, 0, 1, 2, 1024 };

    // 把 ia 的 6 个元素拷贝到 ivec 中 vector< int > ivec( a, a+6 );

    // 拷贝 3 个元素 a[2], a[3], a[4] vector< int > ivec( &a[ 2 ], &a[ 5 ] );     //注意第二个指正要指到末尾元素的下一个元素

    以下是事例:

     1 #include<iostream>
     2 #include <vector>
     3 using namespace std;
     4 int main(){
     5     int a[ 6 ] = { -2, -1, 0, 1, 2, 1024 };
     6     //拷贝数组中的元素
     7     vector< int > vec1( a, a+6 );  
     8     cout<<vec1[0]<<' '<<vec1[1]<<' '<<vec1[2]<<' '<<vec1[3]<<endl;
     9 
    10     //拷贝数组中的元素
    11     //两个指针标记了对象的值的范围,第二个指针总是指向要拷贝的末元素的下一位置
    12     vector< int > vec( &a[ 2 ], &a[5] );
    13     cout<<vec[0]<<' '<<vec[1]<<' '<<vec[2]<<' '<<vec[3]<<endl;  //vec[3]输出错误,因为不存在
    14     
    15     //把vec 拷贝到另一个容器中
    16     vector< int > newone;
    17     newone = vec;
    18     cout<<newone[0]<<endl;
    19     return 0;
    20 }

    常用方法

    c.clear()                              移除容器中所有数据。

    c.empty()                            判断容器是否为空。

    c.erase(pos)                       删除pos位置的数据

    c.erase(beg,end)               删除[beg,end)区间的数据

    c.front()                              传回第一个数据。

    c.insert(pos,elem)              在pos位置插入一个elem拷贝

    c.pop_back()                     删除最后一个数据。

    c.push_back(elem)            在尾部加入一个数据。

    c.resize(num)                     重新设置该容器的大小

    c.size()                              返回容器中实际数据的个数。

    c.begin()                           返回指向容器第一个元素的迭代器

    c.end()                              返回指向容器最后一个元素的迭代器

    使用迭代器

    迭代器:迭代器是个所谓的智能指针,具有遍历复杂数据结构的能力,就看做是容器的专用指针吧,用容器时一般都要使用到这个,那种用数组索引的方法反而更加少用了,下面是一个简单的使用迭代器的示例: 

     1 //利用迭代器更改容器中的某一个值
     2 #include<iostream>
     3 #include<vector>
     4 using namespace std;
     5 int main(){
     6     vector<int> abc;
     7     abc.push_back(1);       //push几个值进去
     8     abc.push_back(5);
     9     abc.push_back(3);        
    10     abc.push_back(4);
    11      
    12      //   迭代器遍历寻遍
    13     for(vector<int>::iterator it = abc.begin();it!=abc.end();)
    14     {
    15         if(*it ==4)
    16             it = abc.erase(it);
    17         else
    18             ++it;
    19     }
    20     cout << "After remove 5:
    ";
    21    for(vector<int>::iterator i = abc.begin(); i < abc.end(); ++i)
    22    {
    23        cout << * i << " ";
    24    }
    25    cout << endl;
    26    return 0;
    27 }

    以下是一些简单的程序:

    定义一个二维数组

     1 #include<iostream>
     2 #include<vector>
     3 using namespace std;
     4 int main(){
     5     int i = 0,j = 0;    //容器内部的容器 
     6     //Array  是10行,且都为0
     7     vector< vector<int> > Array(10,vector<int>(0));
     8 
     9     for(j = 0; j < 10; j++)
    10     {
    11         for (i = 0; i < 9; i++)
    12             {
    13                 Array[j].push_back(i);
    14              }
    15     }
    16   //输出
    17     for( j = 0; j < 10; j++ )
    18     {
    19         for(i = 0; i<Array[j].size(); i++)
    20         {
    21             cout << Array[j][i] << " ";
    22         }
    23             cout<< endl;
    24     }
    25 }

    排序与逆向

     1 #include<iostream>
     2 #include<vector>
     3 #include<algorithm>
     4 #include <cstdlib>
     5 using namespace std;
     6 int main(){
     7     vector<int>  num;
     8     int element;
     9     while(cin>>element)
    10         num.push_back(element);
    11 
    12     sort(num.begin(),num.end());             //从大到小排序
    13     
    14     reverse(num.begin(),num.end());          //逆向输出
    15 
    16     for(int i = 0;i<num.size();i++)
    17         cout<<num[i]<<endl;
    18 
    19     system("pause");
    20         return 0;
    21 }

    定义二维动态数组

     1 #include<iostream>
     2 #include<vector>
     3 using namespace std;
     4 int main(){
     5     int i = 0,j = 0;
     6     vector<vector<int> >  Array;
     7     vector<int>  line;
     8     for(j = 0;j < 20;j++){
     9         Array.push_back(line);     //要对每一个vector初始化,初始化列。
    10         for (i = 0; i < 9; i++ )
    11          {
    12             Array[ j ].push_back( i );
    13         }
    14     }
    15 
    16     for(j = 0;j < 10;j++ )
    17     {
    18          for(i = 0; i<Array[j].size(); i++)
    19         {
    20             cout << Array[j][i] << " ";
    21         }
    22          cout<< endl;
    23     }
    24 }

    参考:http://blog.csdn.net/xiaohuizi2009/article/details/8067667

  • 相关阅读:
    Unix&Linux下常见的性能分析工具介绍
    理解Load Average做好压力测试
    cron 的配置和说明
    原生js模仿下拉刷新功能
    webpack初步了解
    数组的迭代方法
    webpack4
    反思面向对象
    C和lua的互相调用
    对Zookeeper的一些分析
  • 原文地址:https://www.cnblogs.com/LZYY/p/3242074.html
Copyright © 2011-2022 走看看