用vector物件代替陣列——使用陣列初始化vector物件,vector的拷貝方式說明。
阿新 • • 發佈:2018-11-10
在看到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初值的範圍。第二個指標指向被複制的最後一個元素之後的地址空間。(圈重點!!!!)
所以我的問題就迎刃而解了。