C++如何將一個vector內(nèi)容賦值給另一個vector,及swap與assign區(qū)別
賦值
方式一、申明時賦值
vector<int> v2; v2.push_back(0); v2.push_back(1); vector<int> v1(v2); //聲明
方式二、使用assign賦值
vector<int> v2; v2.push_back(0); v2.push_back(1); vector<int> v1; //聲明v1 v1.assign(v2.begin(), v2.end());//將v2賦值給v1
方式三、使用swap賦值
vector<int> v2; v2.push_back(0); v2.push_back(1); vector<int> v1(); v1.swap(v2); //將v2賦值給v1
方式四、迭代器遍歷賦值
使用迭代器和循環(huán)語句賦值的方法,其方法運行效率較差:
vector<int> v2;
v2.push_back(0);
v2.push_back(1);
vector<int> v1;
vector<int>::iterator it;//聲明迭代器
for(it = v2.begin(); it!=v2.end(); ++it)//遍歷v2,賦值給v1
{
v1.push_back(it);
}方式五、直接用等號(=)賦值
vector<int> v2; v2.push_back(0); v2.push_back(1); vector<int> v1; v1 = v2;
但這種方式需要注意:
如果在參數(shù)賦值,請注意使用指針或者引用,否則導(dǎo)致賦值失敗,該內(nèi)容不屬于本文討論范圍
但舉個例:
//引用方式傳參
int testFun1(vector<int> &v1)
{
vector<int> v2;
v2.push_back(0);
v2.push_back(1);
v1 = v2;
}
//指針方式傳參
int testFun2(vector<int> *v1)
{
vector<int> v2;
v2.push_back(0);
v2.push_back(1);
v1 = &v2;
}
//全局或者局部變量方式
vector<int> v2;
int testFun2(vector<int> v1)
{
v2.push_back(0);
v2.push_back(1);
v1 = v2;
}
int testFun2()
{
//方式一
vector<int> v1;
testFun1(&v1);
//方式二
vector<int> *v2;
testFun1(v2);
//方式三
vector<int> v3;
testFun1(v3);
}swap與assign的區(qū)別
我們此處主要討論它們兩的用作用和效率。
- 作用
swap和assign都可以用在將一個vector的內(nèi)容全部復(fù)制給另外一個vector,
區(qū)別是swap會改變源vector,而assign會清空目的vector后再將源vector的值全部插入到目的vector中。
- 效率
swap只是交換vector的頭指針,時間復(fù)雜度是常數(shù);
而assigin時間復(fù)雜度則是線性。
測試代碼
#include <vector>
#include "DebugUtility.h"
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
void print(int x)
{
cout << x << endl;
}
void Swap(vector<string>& source, vector<string>& dest)
{
DebugUtility temp;
dest.swap(source);
}
void Assign(vector<string>& source, vector<string>& dest)
{
DebugUtility temp;
dest.assign(source.begin(), source.end());
}
int main(int argc, const char *argv[])
{
vector<string> source(900000, "90");
vector<string> destination(1, "abc");
Swap(source, destination);
//source.clear();
//for_each(destination.begin(), destination.end(), print);
//Assign(source, destination);
//source.clear();
//for_each(destination.begin(), destination.end(), print);
return 0;
}測試結(jié)果
Total time elapsed : 1 us
900000Total time elapsed : 12391 us
900000
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
C/C++ Qt 數(shù)據(jù)庫與Chart歷史數(shù)據(jù)展示
這篇文章主要介紹了Qt利用Qchart組件展示數(shù)據(jù)庫中的歷史數(shù)據(jù)。文中的示例代碼講解清晰,具有一定的學(xué)習(xí)和工作價值,感興趣的小伙伴可以學(xué)習(xí)一下2021-12-12
C語言時間轉(zhuǎn)換函數(shù)接口的用法全面講解
這篇文章主要介紹了C語言中時間處理的常用類型和函數(shù),包括time_t、structtm等,以及time()、localtime()、gmtime()、mktime()、asctime()、ctime()和strftime()等,通過一個示例程序,展示了如何獲取當(dāng)前時間、轉(zhuǎn)換時間格式、計算時間差和進(jìn)行時間操作2026-01-01
C++基礎(chǔ)之this指針與另一種“多態(tài)”
this指針識別了同一個類的不同的對象,換句話說,this指針使得成員函數(shù)可以訪問同一個類的不同對象。再深入一點,this指針使得成員函數(shù)會因為this指針的不同而訪問到了不同的成員變量2013-07-07
C語言運用函數(shù)指針數(shù)組實現(xiàn)計算器功能
這篇文章主要為大家詳細(xì)介紹了C語言運用函數(shù)指針數(shù)組實現(xiàn)計算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-10-10
C語言數(shù)據(jù)結(jié)構(gòu)與算法之圖的遍歷(一)
這篇文章主要是介紹了利用深度優(yōu)先算法實現(xiàn)圖的遍歷,文中利用圖文詳細(xì)的介紹了實現(xiàn)步驟,對我們學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法有一定的幫助,需要的朋友可以參考一下2021-12-12

