酒店网站建设策划书,商标怎么设计,Dw怎么做网站往里面加标题和字,万素网在本文中#xff0c;我们将主要介绍5种将一个vector内容赋值给另一个vector的方式#xff0c;顺便讨论下swap与assign的区别。
赋值
方式一、申明时赋值
vectorint v2;
v2.push_back(0);
v2.push_back(1);vectorint v1(v2); //声明方式二、使用assign赋值…在本文中我们将主要介绍5种将一个vector内容赋值给另一个vector的方式顺便讨论下swap与assign的区别。
赋值
方式一、申明时赋值
vectorint v2;
v2.push_back(0);
v2.push_back(1);vectorint v1(v2); //声明方式二、使用assign赋值
vectorint v2;
v2.push_back(0);
v2.push_back(1);vectorint v1; //声明v1
v1.assign(v2.begin(), v2.end());//将v2赋值给v1方式三、使用swap赋值
vectorint v2;
v2.push_back(0);
v2.push_back(1);vectorint v1();
v1.swap(v2); //将v2赋值给v1方式四、迭代器遍历赋值
使用迭代器和循环语句赋值的方法其方法运行效率较差:
vectorint v2;
v2.push_back(0);
v2.push_back(1);vectorint v1;vectorint::iterator it;//声明迭代器
for(it v2.begin(); it!v2.end(); it)//遍历v2,赋值给v1
{v1.push_back(it);
}方式五、直接用等号()赋值
vectorint v2;
v2.push_back(0);
v2.push_back(1);vectorint v1;
v1 v2;但这种方式需要注意如果在参数赋值请注意使用指针或者引用否则导致赋值失败该内容不属于本文讨论范围但举个例
//引用方式传参
int testFun1(vectorint v1)
{vectorint v2;v2.push_back(0);v2.push_back(1);v1 v2;
}
//指针方式传参
int testFun2(vectorint *v1)
{vectorint v2;v2.push_back(0);v2.push_back(1);v1 v2;
}//全局或者局部变量方式
vectorint v2;int testFun2(vectorint v1)
{v2.push_back(0);v2.push_back(1);v1 v2;
}int testFun2()
{//方式一vectorint v1;testFun1(v1);//方式二vectorint *v2;testFun1(v2);//方式三vectorint v3;testFun1(v3);
}swap与assign的区别
我们此处主要讨论它们两的用作用和效率。
作用 swap和assign都可以用在将一个vector的内容全部复制给另外一个vector区别是swap会改变源vector而assign会清空目的vector后再将源vector的值全部插入到目的vector中。
效率 swap只是交换vector的头指针时间复杂度是常数而assigin时间复杂度则是线性。
测试代码
#include vector
#include DebugUtility.h
#include iostream
#include algorithm
#include stringusing namespace std;void print(int x)
{cout x endl;
}void Swap(vectorstring source, vectorstring dest)
{DebugUtility temp;dest.swap(source);
}void Assign(vectorstring source, vectorstring dest)
{DebugUtility temp; dest.assign(source.begin(), source.end());
}int main(int argc, const char *argv[])
{vectorstring source(900000, 90);vectorstring 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;
}测试结果
Total time elapsed : 1 us
900000Total time elapsed : 12391 us
900000