C 標準庫型別vector

2021-09-25 12:43:05 字數 3888 閱讀 4465

特別注意:

如果需要表示的向量長度太長,容易導致記憶體洩漏,而且效率會變低;

vector作為函式的引數或返回值是,需要注意它的寫法:

double d(vector&a, vector&b)

#includeusing std::vector;

int main()

1、定義和初始化vector物件2、列表初始化vector物件(1)列表初始化時,內容必須放在花括號裡。

vectorv1;        //正確,v1包含了三個字串

vectorv2("a", "a", "a"); //錯誤,必須要用花括號

(2)建立指定數量的元素 

可以用vector物件容納元素數量和所有元素的統一值初始化vector物件。

vectorivec(10, -1);        //10個int型別元素,每個都被初始化為-1

vectorsvec(10, "hi"); //10個string型別元素,每個都被初始化為"hi"

(3)值初始化

可以只提供vector物件容納的元素數量而略去初始值,如果如果是內建型別中的int和string,則他們分別初始化為0和空。

當使用值初始化時,必須提供其型別,否則無法完成值初始化工作。

vectorivec(10);        //10個元素,每個都初始化為0

vectorsvec(10); //10個元素,每個都初始化為空string物件

(4)列表初始化還是元素數量?

某種情況下,初始化的含義依賴初始化時使用的是花括號還是圓括號。

但在特殊情況下,花括號內不能提供列表初始化時,編譯器會嘗試預設值初始化vector物件,將花括號轉換為圓括號。

vectorv1(10);        //v1有10個元素,每個值都初始化為0

vectorv2; //v2有1個元素,該元素值為10

vectorv3(10, 1); //v3有10個元素,每個值都初始化為1

vectorv4 //v4有兩個元素,值分別為10和1

//當使用的物件型別為string,結果跟int不一樣

vectorv5; //列表初始化:v5有乙個元素,初始化為"hi"

vectorv6("hi"); //錯誤,不能使用字串字面值構建vector物件

vectorv7; //v7有10個預設初始化的元素,全為空string物件

vectorv8; //v8有10個值為"hi"的元素,列表初始化轉換為預設值初始化

//當進行string列表初始化時,不可以用int初始化strin**7、v8花括號內的int值不能作為元素的初始化物件

//所以編譯器使用了預設初始化

3、向vector物件中新增元素(1)新增元素使用push_back(arge)函式。因為如果只用列表初始化,如果要新增1-999或者更多,需要把所有元素乙個乙個羅列出來會顯得很笨重,所有我們需要建立乙個空vector,再利用成員函式push_back把乙個值當成vector物件的尾元素「壓到(push)」到vector物件的「尾端(back)」。

vectorv1;                //建立空vector物件

for(int i = 0;i != 100;i++)

v1.push_back(i); //依次把整數值放到v1尾端,迴圈結束後v1有100個元素,值從0到99

for(int n = 0;n執行結果:

(2)標準輸入的方法:

string word;

vectortext; //建立空vector

while(cin >> word)

(3)以下內容與string插入的操作類似 :

v.insert(v it,const t& x):向量中迭代器指向元素前增加乙個元素x

v.insert(v it,int n,const t& x):向量中迭代器指向元素前增加n個相同的元素x

v.insert(v it,const_v first,const_v last):向量中迭代器指向元素前插入另乙個相同型別向量的[first,last)間的資料

除了上面那些操作之外,vector還提供了幾種其他操作,大多數都和string的相關操作類似

v.empty()     如果v不含任何元素,返回真;否則返回假

v.size()        返回v中元素的個數

v[n]             返回v中第n個位置上元素的引用

, >=       與string相同按照字典順序進行比較

1、計算vector物件內的索引

例子:計算出輸入的成績當中的成績段個數,以10分為乙個分數段:0-9,10-19以此類推一共11個分數段

vectorscores(11, 0);        //11個分數段,全部初始化為0

unsigned grade;

while(cin >> grade) //讀取輸入的成績

實現**如下: 

#include #include #include using std::vector;

using std::string;

using std::cin; using std::cout; using std::endl;

int main()

cout << "grades.size = " << grades.size() << endl;

for (auto it : grades)

cout << it << " ";

cout << endl;

cout << "scores.size = " << scores.size() << endl;

for (auto it : scores)

cout << it << " ";

cout << endl;

vectoralt_scores(11, 0);

for (auto it = grades.begin(); it != grades.end(); ++it)

cout << "alt_scores.size = " << alt_scores.size() << endl;

for (auto it = alt_scores.begin(); it != alt_scores.end(); ++it)

cout << *it << " ";

cout << endl;

system("pause");

return 0;

}

執行輸入非數字結束: 

C 標準庫vector型別

vector屬於順序容器,所謂順序容器,就是元素的順序與元素的值無關,與元素加入容器的位置相對應。對於vector可以將其理解為可變大小陣列,支援快速隨機訪問,在尾部之外的位置插入刪除可能會比較慢。了解完概念接下來就開始學習它的用法 假設以下 前面都包含vector標頭檔案,幷包含using nam...

c 標準庫型別 vector

一 標準庫型別vector表示物件的集合,物件型別相同,需要 include using namespace std or using std vector 二 定義和初始化vector物件 vectorv1 vectorv2 v1 vectorv2 v1 vectorv3 n,val n個val元...

C 標準庫型別 vector

vector表示物件的集合,其中所有的物件的型別均相同。如果需要使用vector,需要 include using std vector vector name 其中t表示物件的型別,除了基本內建型別外,也可以是string,甚至是vector型別vectorv1 預設初始化 vectorv2 v1...