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

  • 相关阅读:
    ERROR Function not available to this responsibility.Change responsibilities or contact your System Administrator.
    After Upgrade To Release 12.1.3 Users Receive "Function Not Available To This Responsibility" Error While Selecting Sub Menus Under Diagnostics (Doc ID 1200743.1)
    产品设计中先熟练使用铅笔 不要依赖Axure
    12.1.2: How to Modify and Enable The Configurable Home Page Delivered Via 12.1.2 (Doc ID 1061482.1)
    Reverting back to the R12.1.1 and R12.1.3 Homepage Layout
    常见Linux版本
    网口扫盲二:Mac与Phy组成原理的简单分析
    VMware 8安装苹果操作系统Mac OS X 10.7 Lion正式版
    VMware8安装MacOS 10.8
    回顾苹果操作系统Mac OS的发展历史
  • 原文地址:https://www.cnblogs.com/LZYY/p/3242074.html
Copyright © 2011-2022 走看看