cb40a_c++_STL_算法_交换swap_ranges
阅读原文时间:2023年07月14日阅读:1

cb40a_c++_STL_算法_交换swap_ranges
swap_ranges(b,e,b2);
如果两个容器的数据数量不一致时,只交换一部分数据,
a里面3个,b里面5个,则只会交换3个,b里面还有两个不变

注意:下列两种方法也是交换算法
1.容器的swap()成员函数
2.赋值操作

/*cb40a_c++_STL_算法_交换swap_ranges
swap_ranges(b,e,b2);
如果两个容器的数据数量不一致时,只交换一部分数据,
a里面3个,b里面5个,则只会交换3个,b里面还有两个不变

注意:下列两种方法也是交换算法
1.容器的swap()成员函数
2.赋值操作

*/

#include
#include
#include
#include

using namespace std;

int main()
{
vector ivec;
deque ideq;

 for (int i = ; i <= ; ++i)  
     ivec.push\_back(i);  
 for (int i = ; i <= ; ++i)  
     ideq.push\_back(i);  
 cout << "vector数据" << endl;  
 for (vector<int> ::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)  
     cout << \*iter << ' ';  
 cout << endl;  
 cout << "deque的数据" << endl;  
 for (deque<int>::iterator iter = ideq.begin(); iter != ideq.end(); ++iter)  
     cout << \*iter << ' ';  
 cout << endl;  
 cout << "vector与deque的数据交换" << endl;

 swap\_ranges(ivec.begin(), ivec.end(), ideq.begin());

 //再次显示:  
 cout << "vector数据" << endl;  
 for (vector<int> ::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)  
     cout << \*iter << ' ';  
 cout << endl;  
 cout << "deque的数据" << endl;  
 for (deque<int>::iterator iter = ideq.begin(); iter != ideq.end(); ++iter)  
     cout << \*iter << ' ';  
 cout << endl;

 deque<int>::iterator pos;  
 pos = swap\_ranges(ivec.begin(), ivec.end(), ideq.begin());  
 if (pos != ideq.end())  
 {  
     cout << "还存在没有交换完的数据: 位置是:" << \*pos << endl;  
 }

 //再次显示:  
 cout << "vector数据" << endl;  
 for (vector<int> ::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)  
     cout << \*iter << ' ';  
 cout << endl;  
 cout << "deque的数据" << endl;  
 for (deque<int>::iterator iter = ideq.begin(); iter != ideq.end(); ++iter)  
     cout << \*iter << ' ';  
 cout << endl;

 cout << "ideq里面:前面的三个数据和后面的三个数据相互交换" << endl;  
 swap\_ranges(ideq.begin(), ideq.begin()+ , ideq.rbegin());  
 for (deque<int>::iterator iter = ideq.begin(); iter != ideq.end(); ++iter)  
     cout << \*iter << ' ';  
 cout << endl;

 vector<int>ivec1;  
 vector<int>ivec2;  
 ivec1.push\_back();  
 ivec1.push\_back();  
 ivec1.push\_back();

 ivec2.push\_back();  
 ivec2.push\_back();  
 ivec2.push\_back();

 cout << "交换前vector1的数据:" << endl;  
 for (vector<int> ::iterator iter = ivec1.begin(); iter != ivec1.end(); ++iter)  
     cout << \*iter << ' ';  
 cout << endl;  
 cout << "交换前vector2的数据:" << endl;

 for (vector<int> ::iterator iter = ivec2.begin(); iter != ivec2.end(); ++iter)  
     cout << \*iter << ' ';  
 cout << endl;

 ivec1.swap(ivec2);  
 cout << "ivec1.swap(ivec2);实际交换的是指针---,速度快。" << endl;

 cout << "交换后vector1的数据:" << endl;  
 for (vector<int> ::iterator iter = ivec1.begin(); iter != ivec1.end(); ++iter)  
     cout << \*iter << ' ';  
 cout << endl;  
 cout << "交换后vector2的数据:" << endl;

 for (vector<int> ::iterator iter = ivec2.begin(); iter != ivec2.end(); ++iter)  
     cout << \*iter << ' ';  
 cout << endl;

 return ;  

}