Skip to content

Latest commit

 

History

History
27 lines (20 loc) · 772 Bytes

vector的swap机制.md

File metadata and controls

27 lines (20 loc) · 772 Bytes

概述:由下述可见,vector的swap可以直接传入nums[i],其会自动识别索引,即使相同的值也能交换。

原理:

void swap( T& a, T& b );

  • swap函数需传入两个左值的引用,如果是两个指针,就直接对其指向内容进行交换。如果是两个num[i]、nums[j],就对齐进行取地址,然后对内容进行交换。
  • num[i]、nums[j]是左值,因为其可以被取地址,也可以被赋值。
  • 如果是直接swap(1,3),那肯定就不行了。
vector<int> nums = { 1,2,3,3 };
print_container(nums);
swap(nums[0], nums[3]);
print_container(nums);

vector<int> nums1 = { 1,2,3,3 };
print_container(nums1);
swap(nums1[0], nums1[2]);
print_container(nums1);

//1 2 3 3
//3 2 3 1
//1 2 3 3
//3 2 1 3