赋值和swap
![](https://img-blog.csdn.net/20130708102852703)
*赋值=:
无论赋值前容器大小是否相同, 赋值后两个容器的大小相等
eg:
list<int> lst1;
list<int> lst2(5);
lst1=lst2;
cout<<lst1.size()<<endl;//5
cout<<lst2.size()<<endl;//5
*赋值assign:
原型:
range :
template< class InputIt >
void assign( InputIt first, InputIt last );
fill :
void assign( size_type count, const T& value );
解析:
count :容器新的大小
value :初始化容器的元素的值
first, last : 被复制容器的取值范围
eg:
int arr[]={1,2,3,4,5};
vector<int> vec1;
vector<int> vec2(arr,arr+5);
vec1.assign(vec2.begin(),vec2.begin()+3);
vec2.assign(3,1);
for(vector<int>::iterator it=vec1.begin();it!=vec1.end();it++)
{
cout<<*it<<'\t'; //1 2 3
*swap
以vector为例:
原型:
void swap (vector& x);
解析:
完成swap操作后,原来的迭代器并不会失效
eg:
int arr[]={1,2,3,4,5};
vector<int> vec1;
vector<int> vec2(arr,arr+5);
vector<int>::iterator it=vec2.begin();
cout<<*it<<endl;//交换前1
vec1.swap(vec2);
cout<<*it<<endl;//交换后还是1
*赋值=:
无论赋值前容器大小是否相同, 赋值后两个容器的大小相等
eg:
list<int> lst1;
list<int> lst2(5);
lst1=lst2;
cout<<lst1.size()<<endl;//5
cout<<lst2.size()<<endl;//5
*赋值assign:
原型:
range :
template< class InputIt >
void assign( InputIt first, InputIt last );
fill :
void assign( size_type count, const T& value );
解析:
count :容器新的大小
value :初始化容器的元素的值
first, last : 被复制容器的取值范围
eg:
int arr[]={1,2,3,4,5};
vector<int> vec1;
vector<int> vec2(arr,arr+5);
vec1.assign(vec2.begin(),vec2.begin()+3);
vec2.assign(3,1);
for(vector<int>::iterator it=vec1.begin();it!=vec1.end();it++)
{
cout<<*it<<'\t'; //1 2 3
}
cout<<endl;
for(vector<int>::iterator it=vec2.begin();it!=vec2.end();it++)
{
cout<<*it<<'\t';//1 1 1
}
*=和assign的区别:
assing可以在不同类型的容器(元素类型可以不同但相互兼容)之间赋值
eg:
char* str[]={"hello","how","are","you"};
vector<char*> vec(str,str+4);
list<string> lst;
lst.assign(vec.begin(),vec.end());
for(list<string>::iterator it=lst.begin();it!=lst.end();it++)
{
cout<<*it<<'\t'; //hello how are you
}
*swap
以vector为例:
原型:
void swap (vector& x);
解析:
完成swap操作后,原来的迭代器并不会失效
eg:
int arr[]={1,2,3,4,5};
vector<int> vec1;
vector<int> vec2(arr,arr+5);
vector<int>::iterator it=vec2.begin();
cout<<*it<<endl;//交换前1
vec1.swap(vec2);
cout<<*it<<endl;//交换后还是1