void test(const vector<int> &v)
您可以使用vector來替代陣列,並使用陣列型式(Array idiom)的方式來操作vector,要使用vector,必須含入vector表頭檔:
要建立vector型態的物件(Object),您必須提供元素型態與長度資訊,例如下例中建立int元素的vector,並擁有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(表示不指向任何位址),如果您打算將所有元素初始為指定的值,則可以如下:
上例中將宣告有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> 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 constructors | create vectors and initialize them with some data |
Vector operators | compare, assign, and access elements of a vector |
assign | assign elements to a vector |
at | returns an element at a specific location |
back | returns a reference to last element of a vector |
begin | returns an iterator to the beginning of the vector |
capacity | returns the number of elements that the vector can hold |
clear | removes all elements from the vector |
empty | true if the vector has no elements |
end | returns an iterator just past the last element of a vector |
erase | removes elements from a vector |
front | returns a reference to the first element of a vector |
insert | inserts elements into the vector |
max_size | returns the maximum number of elements that the vector can hold |
pop_back | removes the last element of a vector |
push_back | add an element to the end of the vector |
rbegin | returns a reverse_iterator to the end of the vector |
rend | returns a reverse_iterator to the beginning of the vector |
reserve | sets the minimum capacity of the vector |
resize | change the size of the vector |
size | returns the number of items in the vector |
swap | swap the contents of this vector with another |
留言列表