關於標準庫型別1:vector

2020-08-12 21:41:38

標準庫型別vector

表示物件的合集,其中所有物件的型別都相同。集閤中每個物件都有與之對應的索引,索參照於存取物件,我們也常常稱之爲物件

定義和初始化vector物件

vector<T> a1    //a1是一個空vector,他潛在的元素是T型別的,執行預設初始化
vector<T> a2(a1)          //v2中含有v1所有元素的副本
vector<T> a3=a1               //等價於a3(a1)
vector<T> a4(n,val)      //a4中包含了n個重複的元素,每個元素都是val
vector<T> a5(n)                  //包含了n個預設初始化物件
vector<T> a6{a,b,c,d,e}               //a6包含了初始值個數的元素,每個元素被賦予相應的初始值
vector<T> a7={a,b,c,d,e}          //等價於a7{a,b,c,d,e}

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

int main()
{
	vector<int> a1;
	vector<int> a2(a1);
	vector<int> a3=a1;
	vector<int> a4(5, 10);
	vector<int> a5{1,2,3,4,5};
	vector<int> a6 = { 1, 2, 3, 4, 5 };
	//cout << a1[0] << endl;
	//cout << a2[0] << endl;
	//cout << a3[0] << endl;   因爲a1,a2,a3都爲空,所以不能存取
	cout << a4[0] << endl;
	cout << a5[0] << endl;
	cout << a6[0] << endl;
	system("pause");
	return 0;
}

列表初始化vector物件

  1. 使用拷貝初始化時,只能提供一個初始值
  2. 如果提供一個類內初始值,則只能使用拷貝初始化或者花括號的形式初始化
  3. 如果提供的是初始元素值的列表,則只能把初始值都放在花括號裏面進行初始化

列表初始化還是元素個數?

如果用的圓括號,可以說提供的值是用來構造vector物件的
    vector<int> a1(10);    //有10個元素,每個都是0
    vector<int> a2{ 10 };        //有1個元素,值爲10
    vector<int> a3(10, 1);            //有10個元素,每個都是1
    vector<int> a4{ 10, 1 };       //有兩個元素,值分別是10和1

如果使用的是花括號,可以表述爲我們想列表初始化該vector物件。
    vector<string> b1{ "abc" };      //有一個元素
    //vector<string> b2("abc");      //不能使用字串構件vector物件
    vector<string> b1{ 10 };         //有10個元素
    vector<string> b1{ 10, "abc" };        //有10個值爲abc的元素
要想初始化vector物件,花括號裡的值必須與元素型別相同。如果不同,則不呢個作爲元素的初始值,因此編譯器會嘗試用預設初始化vector物件

新增元素push_back

用該方法新增的物件都是新增到vector物件的末尾

    vector<int>a;
    for (int i = 0; i < 10; i++)
    {
        a.push_back(i);
    }

其它vector操作

a.empty()          //如果不含任何元素則爲真
a.size()     //返回元素個數
a.push_back()       //向尾端新增一個元素
a[n]       //返回第n個元素的參照
a=b     //替換元素
a={a,b,c,d}       //替換元素
a==b    //判斷是否相等
a!=b       //判斷是否不等
<,<=,>,>=      //以字典順序進行比較

索引

使用下標運算子能獲取到指定的元素。和string一樣,vector的物件下標也是從0開始,下標的型別是相應的size_type。