1. 程式人生 > >用vector物件代替陣列——使用陣列初始化vector物件,vector的拷貝方式說明。

用vector物件代替陣列——使用陣列初始化vector物件,vector的拷貝方式說明。

在看到c++primer的第三章,3.5.2節練習時,碰到了一個問題如下:

將剛剛建立的陣列拷貝給另一個數組。利用vector 重新寫此程式完成類似的功能。

然後我就在網上尋找答案,同時也學習了很多拷貝的方法

 

一、初始化構造時拷貝

vector<int> tem(list);

這種拷貝相當於複製了list的內部資料,內容沒有發生改變。

二、assign


vector<int> temlist;

temlist.assign(list.begin(), list.end());

和第一種的效果一樣也是複製了一組資料。

三、利用sweap函式來交換,將空的物件與有資料儲存的物件進行交換


vector<int> temlist;

temlist.swap(list);

此時telist內部資料為空的,相當於剪下的性質。

四、insert

vector<int> temlist;vector<int> temlist2;
temlist2.push_back(2);
temlist2.push_back(2);
temlist.insert(temlist.end(), temlist2.begin(), temlist2.end());

相當於將temlist2的資料全部新增到temlist的末尾中去。

下面是關於陣列拷貝到一個物件中去的方法;

如型a[10]拷貝到一個vector的物件中去

經過各種的查詢,我對於這種方式的總結如下:

在C++中,我們不能用陣列直接初始化另一陣列,而只能建立新的陣列,然後顯式的把原陣列的元素逐個複製給新的陣列。
按照C語言中的做法:

const size_t arry_size=6;
int int_arry[arry_size]={0,1,2,3,4,5};
int int_arry2[arry_size];
for(size_t ix=0;ix<arry_size;++i)       
    int_arry2[ix]=int_arry[i];

但是在c++中我們有vector的工具來使用

而使用陣列初始化vector物件,可以直接利用一個vector物件來初始化另一個vector物件:

#include<iostream>
#include<vector>
using namespace std;
int main(){       
  //使用陣列初始化vector物件               
     const size_t arr_size=6;              
     int int_arr[arr_size]={0,1,2,3,4,5};               
     vector<int>ivec(int_arr,int_arr+arr_size);

傳遞給ivec的兩個指標標出了vector初值的範圍。第二個指標指向被複制的最後一個元素之後的地址空間。(圈重點!!!!)

所以我的問題就迎刃而解了。