vector 亦可作為函數的參數例如
void   test(const   vector<int>   &v)
您可以使用vector來替代陣列,並使用陣列型式(Array idiom)的方式來操作vector,要使用vector,必須含入vector表頭檔:
#include <vector>

要建立vector型態的物件(Object),您必須提供元素型態與長度資訊,例如下例中建立int元素的vector,並擁有10個元素:
vector<int> ivector(10);

您可以模彷陣列中存取元素的方式來存取vector的元素,使用下標(Subscript)運算子並指定索引來取得指定的元素,例如:


#include <iostream> 
#include <vector>
using namespace std;

int main() {
vector<int> ivector(10);

for(int i = 0; i < ivector.size(); i++) {
ivector[i] = i;
}

for(int i = 0; i < ivector.size(); i++) {
cout << ivector[i] << " ";
}
cout << endl;

return 0;
}

執行結果:
0 1 2 3 4 5 6 7 8 9

與陣列型態不同的是,vector記得自己的長度資訊,您可以使用size()查詢vector的元素長度,或是使用empty()測試長度是否為0。

當您宣告vector物件時,所有的元素值會有與型態相應的初始值,例如算術相關型態會被初始為0,指標型態初始為0(表示不指向任何位址),如果您打算將所有元素初始為指定的值,則可以如下:
vector<int> ivector(10, 5);

上例中將宣告有10個元素的vector,並將所有的元素值初始為5。

如果您願意,您可以使用一個陣列來作為建構vector的引數(Argument),如此建構出來的vector會擁有陣列所指定的元素初值,在這之前,您要先知道,宣告一個陣列時,陣列名稱所儲存的是第一個元素在記憶體中的位址值,對該位址值加一,表示移至下一個元素,當使用陣列來建構vector時,要指定的是元素的起始位址與最後一個元素的下一個位址,例如以整個陣列來建構vector的話,可以這麼撰寫:

#include <iostream> 
#include <vector>
using namespace std;

int main() {
int iarr[] = {1, 2, 3, 4, 5};

vector<int> ivector(iarr, iarr + 5);

for(int i = 0; i < ivector.size(); i++) {
cout << ivector[i] << " ";
}
cout << endl;

return 0;
}

執行結果:
1 2 3 4 5

如果打算只使用陣列中的某個範圍來建構vector,例如複製索引1到3的元素,則可以如下:

#include <iostream> 
#include <vector>
using namespace std;

int main() {
int iarr[] = {1, 2, 3, 4, 5};

vector<int> ivector(iarr + 1, iarr + 4);

for(int i = 0; i < ivector.size(); i++) {
cout << ivector[i] << " ";
}
cout << endl;

return 0;
}

執行結果:
2 3 4

vector可以使用另一個vector作為引數來建構,例如以ivector1作為引數來建構ivector2:
vector<int> ivector1(5, 1);
vector<int> ivector2(ivector1);

vector可以使用=直接指定給另一個vector,這會將vector的值複製給被指定的vector,例如:


#include <iostream> 
#include <vector>
using namespace std;

int main() {
vector<int> ivector1(5, 1);
vector<int> ivector2; // 定義一個空的vector

ivector2 = ivector1;

for(int i = 0; i < ivector2.size(); i++) {
cout << ivector2[i] << " ";
}
cout << endl;

ivector2[0] = 2;

for(int i = 0; i < ivector2.size(); i++) {
cout << ivector2[i] << " ";
}
cout << endl;

for(int i = 0; i < ivector1.size(); i++) {
cout << ivector1[i] << " ";
}
cout << endl;

return 0;
}

由於指定時是將值一一複製加入目標vector,所以您改變目標vector的值,並不會影響原來的vector,執行結果如下:
1 1 1 1 1
2 1 1 1 1
1 1 1 1 1
vector 抽象容器类型之一(还有list和deque等),与其他几中容器类型不同的是它高效支持随机访问其中的元素。
使用vector,首先必须调用头文件(#include <vector>)
清空vector 使用 clear()
它的声明和初始化是这样的
vector <类型名> 变量名
vector <int> vi = ( 10 , 1 ) //初始化为10个元素的vector,每个元素都为1

push_back()的用法是将元素插入vector容器的最尾部
举个例子
vector <int> vi;
int a[4] = { 0, 1, 2, 3};
for ( int i = 0; i<=4; ++i )
vi.push_back(a[i]);

此时vi就是0 1 2 3
如果改成
vi.push_front( a[i] );
vi就是 3 2 1 0
参考资料:C++ Primer

1.vector 的数据的存入和输出:

#include<stdio.h>
#include<vector>
#include <iostream>

using namespace std;

void main()

{

   int i = 0;

    vector<int> v;

    for( i = 0; i < 10; i++ )

   {

             v.push_back( i );//把元素一个一个存入到vector中

   }

   for( i = 0; i < v.size(); i++ )//v.size() 表示vector存入元素的个数

   {

          cout << v[ i ] << "  "; //把每个元素显示出来

   }

   cont << endl;

注:你也可以用v.begin()和v.end() 来得到vector开始的和结束的元素地址的指针位置。你也可以这样做:

vector<int>::iterator iter;

for( iter = v.begin(); iter != v.end(); iter++ )

{
    cout << *iter << endl;
}

2. 对于二维vector的定义。

1)定义一个10个vector元素,并对每个vector符值1-10。

#include<stdio.h>
#include<vector>
#include <iostream>

using namespace std;

void main()
{
 int i = 0, j = 0;

//定义一个二维的动态数组,有10行,每一行是一个用一个vector存储这一行的数据。

所以每一行的长度是可以变化的。之所以用到vector<int>(0)是对vector初始化,否则不能对vector存入元素。
 vector< vector<int> > Array( 10, vector<int>(0) ); 

for( j = 0; j < 10; j++ )
 {
  for ( i = 0; i < 9; i++ )
  {
   Array[ j ].push_back( i );
  }
 }

 for( j = 0; j < 10; j++ )
 {
  for( i = 0; i < Array[ j ].size(); i++ )
  {
   cout << Array[ j ][ i ] << "  ";
  }
  cout<< endl;
 }
}

2)定义一个行列都是变化的数组。

#include<stdio.h>
#include<vector>
#include <iostream>

using namespace std;

void main()
{
 int i = 0, j = 0;

 vector< vector<int> > Array;
 vector< int > line;
 for( j = 0; j < 10; j++ )
 {
  Array.push_back( line );//要对每一个vector初始化,否则不能存入元素。
  for ( i = 0; i < 9; i++ )
  {
   Array[ j ].push_back( i );
  }
 }

 for( j = 0; j < 10; j++ )
 {
  for( i = 0; i < Array[ j ].size(); i++ )
  {
   cout << Array[ j ][ i ] << "  ";
  }
  cout<< endl;
 }
}

上面就是我对vector使用的总结,更深入的使用,大家查查vector的手册吧。欢迎批评指正。
下面是我找的一些常用vector类的成员函数~
push_back()插入一个元素
pop_back() 可以弹出最后ch一个元素
erase(iterator   it)可以删除指定位置的元素
size()求vector中的已存的元素个数
clear()可以清空vector中的元素

Vector constructorscreate vectors and initialize them with some data
Vector operatorscompare, assign, and access elements of a vector
assignassign elements to a vector
atreturns an element at a specific location
backreturns a reference to last element of a vector
beginreturns an iterator to the beginning of the vector
capacityreturns the number of elements that the vector can hold
clearremoves all elements from the vector
emptytrue if the vector has no elements
endreturns an iterator just past the last element of a vector
eraseremoves elements from a vector
frontreturns a reference to the first element of a vector
insertinserts elements into the vector
max_sizereturns the maximum number of elements that the vector can hold
pop_backremoves the last element of a vector
push_backadd an element to the end of the vector
rbeginreturns a reverse_iterator to the end of the vector
rendreturns a reverse_iterator to the beginning of the vector
reservesets the minimum capacity of the vector
resizechange the size of the vector
sizereturns the number of items in the vector
swapswap the contents of this vector with another

Felix 發表在 痞客邦 PIXNET 留言(0) 人氣()