vector

template < class T, class  Allocator = allocator<T> > class vector;

 
这两个参数的意义:

T: 元素的类型
Allocator: 元素所要分配的空间大小。
下面就一一介绍Vector的内部方法

[cpp] view plaincopy
<span style="font-size:16px;">1   vector构造函数:也就是如何对一个vec对象进行初始化。  
代码//  
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最后一个元素,一个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)c.assign(n,elem)  
  将[beg; end)区间中的数据赋值给c。将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的引用。  
代码示例  
// vec.cpp : Defines the entry point for the console application.  
//  
  
#include "stdafx.h"  
// constructing vectors  
#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  
  
reference back ( );  
const_reference back ( ) const;  
返回上一个元素的引用  
// vector::back  
#include <iostream>  
#include <vector>  
using namespace std;  
  
int main ()  
{  
  vector<int> myvector;  
  
  myvector.push_back(10);  
  
  while (myvector.back() != 0)  
  {  
    myvector.push_back ( myvector.back() -1 );  
  }  
  
  cout << "myvector contains:";  
  for (unsigned i=0; i<myvector.size() ; i++)  
    cout << " " << myvector[i];  
  
  cout << endl;  
  
  return 0;  
}  
Output:  
myvector contains: 10 9 8 7 6 5 4 3 2 1 0  
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;  
}  
Output:  
myvector contains: 1 2 3 4 5  
6   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() << "\n";  
  cout << "capacity: " << (int) myvector.capacity() << "\n";  
  cout << "max_size: " << (int) myvector.max_size() << "\n";  
  return 0;  
}  
A possible output for this program could be:  
size: 100  
capacity: 141  
max_size: 1073741823  
7   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 << "\nmyvector 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() << "\n";  
  cout << "capacity: " << myvector.capacity() << "\n";  
  cout << "max_size: " << myvector.max_size() << "\n";  
  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):\n";  
  
  do {  
    cin >> myint;  
    myvector.push_back (myint);  
  } while (myint);  
  
  cout << "myvector stores " << (int) myvector.size() << " numbers.\n";  
  
  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 << "\nsecond 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   
  
</span>  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值