• vector 内部方法大全 学习(初学者的参考资料)


    1    vector构造函数:也就是如何对一个vector对象进行初始化
    ////////////////////////////代码////////////////////////////////////// 
    explicit vector ( const Allocator& = Allocator() ); 
    explicit vector ( size_type n, const T& value= T(), const Allocator& = Allocator() ); 
    template <class InputIterator>

      vector ( InputIterator first, InputIterator last, const Allocator& = Allocator() ); 
    vector ( const vector<T,Allocator>& x ); 
    ////////////////////////////代码////////////////////////////////////// 
    参数解释:n---初始化元素个数

         T---你所要添加进去的元素 
         first---容器第一个元素

           last---容器最后一个元素

         x---vector的一个引用 
    示例: 
    // constructing vectors 
    #include <iostream> 
    #include <vector> 
    using namespace std; 
     
    int main () 

      unsigned int i; 
     
      // constructors used in the same order as described above: 
      vector<int> first;            // 初始化一个int类型的空vector变量  
      vector<int> second (4,100);             // 初始化4个100 
      vector<int> third (second.begin(),second.end());   
      // 通过second 进行赋值 
      vector<int> fourth (third);               // a copy of third 
     
      // the iterator constructor can also be used to construct from arrays: 
      int myints[] = {16,2,77,29}; 
      vector<int> fifth (myints, myints + sizeof(myints) / sizeof(int) ); 
     
      cout << "The contents of fifth are:"; 
      for (i=0; i < fifth.size(); i++) 
        cout << " " << fifth[i]; 
     
      cout << endl;  
      return 0; 

    输出结果: 
    The contents of fifth are: 16 2 77 29  


    2   vector::~vector 析构函数 
    调用每一个元素对象的析构函数  


    下面是成员函数 
    3   vector::assign 
    template <class InputIterator> 
      void assign ( InputIterator first, InputIterator last ); 
     
      void assign ( size_type n, const T& u ); 
     
    如 c.assign(beg,end)   //将[beg; end)区间中的数据赋值给c

      c.assign(n,elem)     //将n个elem的拷贝赋值给c
     
    示例: 
    // vector assign 
    #include <iostream> 
    #include <vector> 
    using namespace std; 
     
    int main () 

      vector<int> first; 
      vector<int> second; 
      vector<int> third; 
     
      first.assign (7,100);             // a repetition 7 times of value 100 
     
      vector<int>::iterator it; 
      it=first.begin()+1; 
     
      second.assign (it,first.end()-1); // the 5 central values of first 
     
      int myints[] = {1776,7,4}; 
      third.assign (myints,myints+3);   // assigning from array. 
     
      cout << "Size of first: " << int (first.size()) << endl; 
      cout << "Size of second: " << int (second.size()) << endl; 
      cout << "Size of third: " << int (third.size()) << endl; 
      return 0; 
    }  
    输出结果 
    Size of first: 7 
    Size of second: 5 
    Size of third: 3 
     
    4   vector::at 
    const_reference at ( size_type n ) const;  
    reference at ( size_type n ); ---返回 vector 内的第n个值,相当于数组下标,从0开始

     
    代码示例 
    // vec.cpp : Defines the entry point for the console application. 
    #include "stdafx.h" 
    #include <iostream> 
    #include <vector> 
    using namespace std; 
     
    int main () 

        vector<int> myvector(10);//初始化10个为0的元素。 
        unsigned int i; 
        for (i = 0; i < myvector.size(); i ++) 
        { 
            myvector.at(i)=i; 
        } 
        cout << "myvector contains:"; 
        for (i=0; i<myvector.size(); i++) 
            cout << " " << myvector.at(i); 
         
        cout << endl;   
        return 0;    

     
    5   vector::back  
    //返回最后一个元素,而不检查该元素是否存在

    Returns a reference to the last element of the vector.

    reference back( );
    const_reference back( ) const;
    

    Return Value

    The last element of the vector. If the vector is empty, the return value is undefined.

    Remarks

    If the return value of back is assigned to a const_reference, the vector object cannot be modified. If the return value of back is assigned to a reference, the vector object can be modified.

    Example

    // vector_back.cpp
    // compile with: /EHsc
    #include <vector>
    #include <iostream>
    
    int main( )
    {
       using namespace std;   
       vector <int> v1;
       
       v1.push_back( 10 );
       v1.push_back( 11 );
    
       int& i = v1.back( );
       const int& ii = v1.front( );
    
       cout << "The last integer of v1 is " << i << endl;
       i--;
       cout << "The next-to-last integer of v1 is "<< ii << endl;
    }
    

    Output

    The last integer of v1 is 11
    The next-to-last integer of v1 is 10
    


    6  vector::begin 
       iterator begin (); 
       const_iterator begin () const; 


    示例 
    // vector::begin 
    #include <iostream> 
    #include <vector> 
    using namespace std; 
     
    int main () 

      vector<int> myvector; 
      for (int i=1; i<=5; i++)

      myvector.push_back(i); 
     
      vector<int>::iterator it;  
      cout << "myvector contains:"; 
      for ( it=myvector.begin() ; it < myvector.end(); it++ ) 
        cout << " " << *it; 
     
      cout << endl;  
      return 0; 

    输出: 
    myvector contains: 1 2 3 4 5 


    7   vector::capacity 
    返回vector对象存储空间大小 
     
    例子: 
    // comparing size, capacity and max_size 
    #include <iostream> 
    #include <vector> 
    using namespace std; 
     
    int main () 

      vector<int> myvector; 
     
      // set some content in the vector: 
      for (int i=0; i<100; i++)

      myvector.push_back(i); 
     
      cout << "size: " << (int) myvector.size() << " "; 
      cout << "capacity: " << (int) myvector.capacity() << " "; 
      cout << "max_size: " << (int) myvector.max_size() << " "; 
      return 0; 

    A possible output for this program could be: 
    size: 100 
    capacity: 141 
    max_size: 1073741823 


    8   vector::clear 
    清除对象内的所有元素,就是调用了析构函数,清空,然后为0 
     
    示例 
    // clearing vectors 
    #include <iostream> 
    #include <vector> 
    using namespace std; 
     
    int main () 

      unsigned int i; 
      vector<int> myvector; 
      myvector.push_back (100); 
      myvector.push_back (200); 
      myvector.push_back (300); 
     
      cout << "myvector contains:"; 
      for (i=0; i<myvector.size(); i++) cout << " " << myvector[i]; 
     
      myvector.clear(); 
      myvector.push_back (1101); 
      myvector.push_back (2202); 
     
      cout << " myvector contains:"; 
      for (i=0; i<myvector.size(); i++) cout << " " << myvector[i]; 
     
      cout << endl; 
     
      return 0; 

    8   vector::empty 
    bool empty () const; 判断vector对象时否为空。 
    示例: 
    // vector::empty 
    #include <iostream> 
    #include <vector> 
    using namespace std; 
     
    int main () 

      vector<int> myvector; 
      int sum (0); 
     
      for (int i=1;i<=10;i++) myvector.push_back(i); 
     
      while (!myvector.empty()) 
      { 
         sum += myvector.back(); 
         myvector.pop_back(); 
      } 
     
      cout << "total: " << sum << endl; 
       
      return 0; 

    9   vector::end 
    iterator end (); 
    const_iterator end () const; 
     
    Returns an iterator referring to the past-the-end element in the vector container. 
    Both iterator and const_iterator are member types. In the vector class template, these are random access iterators 
     
    // test_vector.cpp : 定义控制台应用程序的入口点。 
    // 
     
    #include "stdafx.h" 
    #include <vector> 
    #include <iostream> 
    using namespace std; 
     
    int _tmain(int argc, _TCHAR* argv[]) 

        vector<int> myvec; 
        for (int i=0;i<6;i++) 
        { 
            myvec.insert(myvec.end(),i); 
        } 
        cout<<"element"; 
        vector<int>::iterator it; 
        for (it=myvec.begin();it<myvec.end();it++) 
        { 
            cout<<" "<<(*it)<<endl; 
        } 
        return 0; 

     
     
    10  vector::erase 
     
    iterator erase ( iterator position ); 
    iterator erase ( iterator first, iterator last ); 
     
    删除vector对象里的一个元素或者一个范围内的元素([first,last)). 
     
    示例: 
    // erasing from vector 
    #include <iostream> 
    #include <vector> 
    using namespace std; 
     
    int main () 

      unsigned int i; 
      vector<unsigned int> myvector; 
     
      // set some values (from 1 to 10) 
      for (i=1; i<=10; i++) myvector.push_back(i); 
       
      // erase the 6th element 
      myvector.erase (myvector.begin()+5); 
     
      // erase the first 3 elements: 
      myvector.erase (myvector.begin(),myvector.begin()+3); 
     
      cout << "myvector contains:"; 
      for (i=0; i<myvector.size(); i++) 
        cout << " " << myvector[i]; 
      cout << endl; 
     
      return 0; 

    Output: 
    myvector contains: 4 5 7 8 9 10 
     
    11  vector::front 
     
      reference front ( ); 
    const_reference front ( ) const; 
     
    Returns a reference to the first element in the vector container. 
     
    #include <iostream> 
    #include <vector> 
    using namespace std; 
     
    int main () 

      vector<int> myvector; 
     
      myvector.push_back(78); 
      myvector.push_back(16); 
     
      // now front equals 78, and back 16 
     
      myvector.front() -= myvector.back(); 
     
      cout << "myvector.front() is now " << myvector.front() << endl; 
     
      return 0; 

     
    Output: 
    myvector.front() is now 62 
    12  vector::get_allocator 
    allocator_type get_allocator() const; 
    // test_vector.cpp : 定义控制台应用程序的入口点。 
    // 
     
    #include "stdafx.h" 
    #include <vector> 
    #include <iostream> 
    using namespace std; 
     
    int _tmain(int argc, _TCHAR* argv[]) 

        vector<int> myvector; 
        int* p; 
        unsigned int i; 
     
        p=myvector.get_allocator().allocate(5); 
        for (int i=0;i<5;i++) 
        { 
            p[i]=i; 
        } 
        cout << "The allocated array contains:"; 
        for (i=0; i<5; i++) cout << " " << p[i]; 
        cout << endl; 
        myvector.get_allocator().deallocate(p,5); 
     
     
        return 0; 

    The allocated array contains: 0 1 2 3 4 
     
    13  vector::insert 
    iterator insert ( iterator position, const T& x ); 
        void insert ( iterator position, size_type n, const T& x ); 
    template <class InputIterator> 
    void insert ( iterator position, InputI  last ); 
    // test_vector.cpp : 定义控制台应用程序的入口点。 
    // 
     
    #include "stdafx.h" 
    #include <vector> 
    #include <iostream> 
    using namespace std; 
     
    int _tmain(int argc, _TCHAR* argv[]) 

        vector<int> myvector(3,100); 
        vector<int> ::iterator it; 
        it=myvector.begin(); 
        it=myvector.insert(it,200); 
        myvector.insert(it,2,300); 
     
        it=myvector.begin(); 
     
        vector<int> anothervector(2,400); 
        myvector.insert(it+2,anothervector.begin(),anothervector.end()); 
         
     
        int array[]={501,502,503}; 
        myvector.insert(myvector.begin(),array,array+3); 
     
        cout << "myvector contains:"; 
         
        for (vector<int>::iterator it=myvector.begin();it<myvector.end();it++) 
        { 
            cout<<" "<<*it; 
        } 
     
        return 0; 
     

     
    Output: 
    myvector contains: 501 502 503 300 300 400 400 200 100 100 100 
    14  vector::max_size 
    size_type max_size () const; 
     
    返回改容器能持有的最大元素数,看一下例子,查看区别 
     
    // comparing size, capacity and max_size 
    #include <iostream> 
    #include <vector> 
    using namespace std; 
     
    int main () 

      vector<int> myvector; 
     
      // set some content in the vector: 
      for (int i=0; i<100; i++) myvector.push_back(i); 
     
      cout << "size: " << myvector.size() << " "; 
      cout << "capacity: " << myvector.capacity() << " "; 
      cout << "max_size: " << myvector.max_size() << " "; 
      return 0; 

    A possible output for this program could be: 
    size: 100 
    capacity: 141 
    max_size: 1073741823 
    15  vector::operator= 
     
    vector<T,Allocator>& operator= (const vector<T,Allocator>& x); 
     
    重载“=”操作符 
     
    // vector assignment 
    #include <iostream> 
    #include <vector> 
    using namespace std; 
     
    int main () 

      vector<int> first (3,0); 
      vector<int> second (5,0); 
     
      second=first; 
      first=vector<int>(); 
     
      cout << "Size of first: " << int (first.size()) << endl; 
      cout << "Size of second: " << int (second.size()) << endl; 
      return 0; 

    输出结果: 
    Size of first: 0 
    Size of second: 3 
     
    16  vector::operator[] 
      reference operator[] ( size_type n ); 
    const_reference operator[] ( size_type n ) const; 
     
    Returns a reference to the element at position n in the vector container. 
    返回vector容器内位置为n的元素的引用 
    和at()函数相同的功能,就是at()不在范围内会抛异常 
    示例 
    // test_vector.cpp : 定义控制台应用程序的入口点。 
    // 
     
    #include "stdafx.h" 
    #include <vector> 
    #include <iostream> 
    using namespace std; 
     
    int _tmain(int argc, _TCHAR* argv[]) 

        vector<int> myvector(10); 
        unsigned int i; 
        vector<int> ::size_type size=myvector.size(); 
        for (i=0;i<10;i++) 
        { 
            myvector[i]=i; 
        } 
        for (i=0;i<size/2;i++) 
        { 
            int temp=myvector[size-1-i]; 
            myvector[size-1-i]=myvector[i]; 
            myvector[i]=temp; 
        } 
        for (i=0;i<10;i++) 
        { 
            cout<<" "<<myvector[i]; 
        } 
        cout<<endl; 
        return 0; 

     
    Output: 
    myvector contains: 9 8 7 6 5 4 3 2 1 0 
    17  vector::pop_back 
    void pop_back ( ); 
     
    移出元素 
    示例 
    // vector::pop_back 
    #include <iostream> 
    #include <vector> 
    using namespace std; 
     
    int main () 

      vector<int> myvector; 
      int sum (0); 
      myvector.push_back (100); 
      myvector.push_back (200); 
      myvector.push_back (300); 
     
      while (!myvector.empty()) 
      { 
        sum+=myvector.back(); 
        myvector.pop_back(); 
      } 
     
      cout << "The elements of myvector summed " << sum << endl; 
     
      return 0; 

    输出结果:The elements of myvector summed 600 
    18  vector::push_back 
    void push_back ( const T& x ); 
     
    在末尾处添加一个元素 
    // vector::push_back 
    #include <iostream> 
    #include <vector> 
    using namespace std; 
     
    int main () 

      vector<int> myvector; 
      int myint; 
     
      cout << "Please enter some integers (enter 0 to end): "; 
     
      do { 
        cin >> myint; 
        myvector.push_back (myint); 
      } while (myint); 
     
      cout << "myvector stores " << (int) myvector.size() << " numbers. "; 
     
      return 0; 

    19  vector::rbegin 
     
    reverse_iterator rbegin(); 
    const_reverse_iterator rbegin() const; 
     
    按照反序迭代输出 
    示例 
     
    // test_vector.cpp : 定义控制台应用程序的入口点。 
    // 
     
    #include "stdafx.h" 
    #include <vector> 
    #include <iostream> 
    using namespace std; 
     
    int _tmain(int argc, _TCHAR* argv[]) 

        vector<int> myvector(10); 
        unsigned int i; 
        vector<int> ::size_type size=myvector.size(); 
        for (i=0;i<10;i++) 
        { 
            myvector[i]=i; 
        } 
        vector<int>::reverse_iterator it; 
        for (it=myvector.rbegin();it<myvector.rend();it ++) 
        { 
            cout<<" "<<*it; 
        } 
        cout<<endl; 
        return 0; 

     
    输出结果:9  8 7 6 5 4 3 2 1 0 
     
    20  vector::rend 
    public member function 
          reverse_iterator rend(); 
    const_reverse_iterator rend() const; 
     
     
    代码 同上 
     
    21  vector::reserve 
    void reserve ( size_type n ); 
    Request a change in capacity 
    Requests that the capacity of the allocated storage space for the elements of the vector container be at least enough to hold n elements.    
     
    示例 
    // vector::reserve 
    #include <iostream> 
    #include <fstream> 
    #include <vector> 
    using namespace std; 
     
    int main () 

      vector<int> content; 
      size_t filesize; 
     
      ifstream file ("test.bin",ios::in|ios::ate|ios::binary); 
      if (file.is_open()) 
      { 
        filesize=file.tellg(); 
     
        content.reserve(filesize); 
     
        file.seekg(0); 
        while (!file.eof()) 
        { 
          content.push_back( file.get() ); 
        } 
     
        // print out content: 
        vector<int>::iterator it; 
        for (it=content.begin() ; it<content.end() ; it++) 
          cout << hex << *it; 
      } 
     
      return 0; 

     
    22  vector::resize 
     
    void resize ( size_type sz, T c = T() ); 
     
    // resizing vector 
    #include <iostream> 
    #include <vector> 
    using namespace std; 
     
    int main () 

      vector<int> myvector; 
     
      unsigned int i; 
     
      // set some initial content: 
      for (i=1;i<10;i++) myvector.push_back(i); 
     
      myvector.resize(5); 
      myvector.resize(8,100); 
      myvector.resize(12); 
     
      cout << "myvector contains:"; 
      for (i=0;i<myvector.size();i++) 
        cout << " " << myvector[i]; 
     
      cout << endl; 
     
      return 0; 

    myvector contains: 1 2 3 4 5 100 100 100 0 0 0 0 
     
    23  vector::size 
    size_type size() const; 
    返回元素个数   
     
    示例: 
    // vector::size 
    #include <iostream> 
    #include <vector> 
    using namespace std; 
     
    int main () 

      vector<int> myints; 
      cout << "0. size: " << (int) myints.size() << endl; 
     
      for (int i=0; i<10; i++) myints.push_back(i); 
      cout << "1. size: " << (int) myints.size() << endl; 
     
      myints.insert (myints.end(),10,100); 
      cout << "2. size: " << (int) myints.size() << endl; 
     
      myints.pop_back(); 
      cout << "3. size: " << (int) myints.size() << endl; 
     
      return 0; 

     
    Output: 
    0. size: 0 
    1. size: 10 
    2. size: 20 
    3. size: 19 
    24  vector::swap 
    交换vector对象里的数据 
    // swap vectors 
    #include <iostream> 
    #include <vector> 
    using namespace std; 
     
    main () 

      unsigned int i; 
      vector<int> first (3,100);   // three ints with a value of 100 
      vector<int> second (5,200);  // five ints with a value of 200 
     
      first.swap(second); 
     
      cout << "first contains:"; 
      for (i=0; i<first.size(); i++) cout << " " << first[i]; 
     
      cout << " second contains:"; 
      for (i=0; i<second.size(); i++) cout << " " << second[i]; 
     
      cout << endl; 
     
      return 0; 
    Output: 
    first contains: 200 200 200 200 200  
    second contains: 100 100 100  

     参考链接:http://msdn.microsoft.com/en-us/library/7df54s3x(v=vs.71).aspx

  • 相关阅读:
    UC将发布高性能HTML5游戏引擎XCanvas
    一台晚会3.15拯救不了这些高科技公司
    4G时代更有利于TDD的发展
    【leetcode】Binary Tree Zigzag Level Order Traversal
    四月电商价格战火重燃 服务为决胜之道
    linux sysfs(3)
    ubuntu gedit 中文显示乱码解决方法
    研究人员将Windows Phone 7和Windows Azure推广到平流层的大气污染研究中
    迁移周系列II/II: On Premises 迁移视频
    玩Rock, Paper, Azure Challenge,赢取免费Kinect和Xbox 360!
  • 原文地址:https://www.cnblogs.com/followyourdream/p/3292086.html
Copyright © 2020-2023  润新知