c++11的碎碎念之两点小坑——remove和array的swap

1610阅读 0评论2021-02-16 stolennnxb
分类:C/C++


点击(此处)折叠或打开

  1.     array<int, 5> a({1,2,3});
  2.     array<int, 5> b({4,5,6});
  3.     cout<<addressof(*a.begin())<<"\t"<<addressof(*b.begin())<<endl;
  4.     a.swap(b);
  5.     cout<<addressof(*a.begin())<<"\t"<<addressof(*b.begin())<<endl;
  6.     cout<<"====================================="<<endl;
  7.     vector<int> va({1,2,3});
  8.     vector<int> vb({4,5,6});
  9.     cout<<addressof(*va.begin())<<"\t"<<addressof(*vb.begin())<<endl;
  10.     va.swap(vb);
  11.     cout<<addressof(*va.begin())<<"\t"<<addressof(*vb.begin())<<endl;



运行结果为:

点击(此处)折叠或打开

  1. 0x22fdc0        0x22fda0
    0x22fdc0        0x22fda0
    =========================
    0x2f6950        0x2f6970
    0x2f6970        0x2f6950
这点可以看出,array<> swap之后实际存储位置没变,真正的交换了其内容,而vector<> swap之后存储元素的地址变了,并没有实际交换容器内的内容

另外: string的reserve()函数有可能会缩小其长度,但是vector却不会缩小


另外:判断一个表达式是左值还是右值,可以依靠在下一行,能否继续访问这个表达式 来进行判断
上一篇:c++11的碎碎念之智能指针
下一篇:c++碎碎念之const以及初始化