C++如何將一個(gè)vector內(nèi)容賦值給另一個(gè)vector,及swap與assign區(qū)別
賦值
方式一、申明時(shí)賦值
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)語句賦值的方法,其方法運(yù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);
}方式五、直接用等號(hào)(=)賦值
vector<int> v2; v2.push_back(0); v2.push_back(1); vector<int> v1; v1 = v2;
但這種方式需要注意:
如果在參數(shù)賦值,請(qǐng)注意使用指針或者引用,否則導(dǎo)致賦值失敗,該內(nèi)容不屬于本文討論范圍
但舉個(gè)例:
//引用方式傳參
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都可以用在將一個(gè)vector的內(nèi)容全部復(fù)制給另外一個(gè)vector,
區(qū)別是swap會(huì)改變?cè)磛ector,而assign會(huì)清空目的vector后再將源vector的值全部插入到目的vector中。
- 效率
swap只是交換vector的頭指針,時(shí)間復(fù)雜度是常數(shù);
而assigin時(shí)間復(fù)雜度則是線性。
測(cè)試代碼
#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;
}測(cè)試結(jié)果
Total time elapsed : 1 us
900000Total time elapsed : 12391 us
900000
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
C/C++ Qt 數(shù)據(jù)庫與Chart歷史數(shù)據(jù)展示
這篇文章主要介紹了Qt利用Qchart組件展示數(shù)據(jù)庫中的歷史數(shù)據(jù)。文中的示例代碼講解清晰,具有一定的學(xué)習(xí)和工作價(jià)值,感興趣的小伙伴可以學(xué)習(xí)一下2021-12-12
Matlab實(shí)現(xiàn)生成箭頭坐標(biāo)軸詳解
這篇文章主要介紹了如何利用Matlab實(shí)現(xiàn)生成箭頭坐標(biāo)軸,為坐標(biāo)軸增添箭頭,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Matlab有一定幫助,需要的可以參考一下2022-03-03
C語言時(shí)間轉(zhuǎn)換函數(shù)接口的用法全面講解
這篇文章主要介紹了C語言中時(shí)間處理的常用類型和函數(shù),包括time_t、structtm等,以及time()、localtime()、gmtime()、mktime()、asctime()、ctime()和strftime()等,通過一個(gè)示例程序,展示了如何獲取當(dāng)前時(shí)間、轉(zhuǎn)換時(shí)間格式、計(jì)算時(shí)間差和進(jìn)行時(shí)間操作2026-01-01
C++基礎(chǔ)之this指針與另一種“多態(tài)”
this指針識(shí)別了同一個(gè)類的不同的對(duì)象,換句話說,this指針使得成員函數(shù)可以訪問同一個(gè)類的不同對(duì)象。再深入一點(diǎn),this指針使得成員函數(shù)會(huì)因?yàn)閠his指針的不同而訪問到了不同的成員變量2013-07-07
C語言運(yùn)用函數(shù)指針數(shù)組實(shí)現(xiàn)計(jì)算器功能
這篇文章主要為大家詳細(xì)介紹了C語言運(yùn)用函數(shù)指針數(shù)組實(shí)現(xiàn)計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10
C語言數(shù)據(jù)結(jié)構(gòu)與算法之圖的遍歷(一)
這篇文章主要是介紹了利用深度優(yōu)先算法實(shí)現(xiàn)圖的遍歷,文中利用圖文詳細(xì)的介紹了實(shí)現(xiàn)步驟,對(duì)我們學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法有一定的幫助,需要的朋友可以參考一下2021-12-12

