一,百度百科介绍

计算机中swap函数很多,比如字符串交换(swap)
swap操作实现交换两个容器内所有元素的功能。要交换的容器的类型必须匹配: 必须是相同类型的容器,而且所存储的元素类型也必须相同。调用了swap函数后,右操作数原来存储的元素被存放在左操作数中,反之亦然。
vector svec1(10); //vector vith 10 elements
vector svec2(24); //vector with 24 elements
svec1.swap(svec2);
执行swap后,容器svec1中存储24个string类型的元素,而svec2则存储10个元素。
关于swap的一个重要问题在于:该操作不会删除或插入任何元素,而且保证在常量时间内实现交换。由于容器内没有移动任何元素,因此迭代器不会失效。

用法
void swap( basic_string &str );
swap()函数把str和本字符串交换。例如:
string first( “This comes first” );
string second( “And this is second” );
first.swap( second );
cout << first << endl;
cout << second << endl;

二,C++ vector容器的swap方法

swap方法可以交换两容器的内容。
例如1:

#include<stdio.h>
#include <string.h>
#include <string>
#include<vector>

using namespace std;

int main()
{
  vector<string> v1;
  vector<string> v2;
  
  v1.clear();  v2.clear();
  
  char buffer[21];

  // 加载字符串到容器v1
  for ( int ii=0;ii<3;ii++ )
  {
     memset(buffer,0,sizeof(buffer));
     sprintf(buffer,"v1第%d个字符串。",ii+1);
     v1.push_back(buffer);
  }

  // 加载字符串到容器v2
  for ( int ii=0;ii<3;ii++ )
  {
     memset(buffer,0,sizeof(buffer));
     sprintf(buffer,"v2第%d个字符串。",ii+1);
     v2.push_back(buffer);
  }

  // swap 前
  printf("swap前:\n");
  for( int ii=0;ii<3;ii++)  {  printf("v1的第%d个元素:%s\n",ii+1,v1[ii].c_str()); };
  for( int ii=0;ii<3;ii++)  {  printf("v2的第%d个元素:%s\n",ii+1,v2[ii].c_str()); };

  v1.swap(v2);

  // swap 后
  printf("swap后:\n");
  for( int ii=0;ii<3;ii++)  {  printf("v1的第%d个元素:%s\n",ii+1,v1[ii].c_str()); };
  for( int ii=0;ii<3;ii++)  {  printf("v2的第%d个元素:%s\n",ii+1,v2[ii].c_str()); };

  return 0;
}

执行结果:

swqp前:
v1的第1个元素:v1第1个字符串。
v1的第2个元素:v1第2个字符串。
v1的第3个元素:v1第3个字符串。
v2的第1个元素:v2第1个字符串。
v2的第2个元素:v2第2个字符串。
v2的第3个元素:v2第3个字符串。
swap后:
v1的第1个元素:v2第1个字符串。
v1的第2个元素:v2第2个字符串。
v1的第3个元素:v2第3个字符串。
v2的第1个元素:v1第1个字符串。
v2的第2个元素:v1第2个字符串。
v2的第3个元素:v1第3个字符串。

string类swap用法

#include <iostream>
#include <string>
//#include<vector>


using namespace std;

int main()
{
   string first( "This comes first" );

   string second( "And this is second" );

   first.swap( second );

   cout <<"first: "<< first << endl;

   cout <<"second: "<< second << endl;

  return 0;
}

执行结果:

first: And this is second
second: This comes first
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐