vector 扩容函数有哪些?

reserve 和 resize。
reserve如果预留的空间,不够则继续分配。
resize如果预留空间不够,也会继续分配内存,并且会调用构造函数

  1. #include<iostream>
  2. #include<vector>
  3. using namespace std;
  4. int main() {
  5. vector<int> v1(10);
  6. cout<<v1.size()<<endl; // 10
  7. v1.resize(20);
  8. cout<<v1.size()<<endl; // 20
  9. v1.reserve(30);
  10. cout<<v1.size()<<endl; // 20
  11. }

两个vector快速交换赋值

swap,直接交换容器内元素的地址,不会重新构造。

  1. #include <iostream>
  2. #include <vector>
  3. int main ()
  4. {
  5. std::vector<int> foo (3,100); // three ints with a value of 100
  6. std::vector<int> bar (5,200); // five ints with a value of 200
  7. std::cout << "foo contains:";
  8. for (unsigned i=0; i<foo.size(); i++)
  9. std::cout << ' ' << foo[i];
  10. std::cout << '\n';
  11. std::cout << "bar contains:";
  12. for (unsigned i=0; i<bar.size(); i++)
  13. std::cout << ' ' << bar[i];
  14. std::cout << '\n';
  15. cout<<&foo[0]<<endl;
  16. foo.swap(bar);
  17. std::cout << "foo contains:";
  18. for (unsigned i=0; i<foo.size(); i++)
  19. std::cout << ' ' << foo[i];
  20. std::std::cout << '\n';
  21. std::cout << "bar contains:";
  22. for (unsigned i=0; i<bar.size(); i++)
  23. std::cout << ' ' << bar[i];
  24. std::cout << '\n';
  25. std::cout<<&bar[0]<<endl;
  26. return 0;
  27. }
  1. foo contains: 100 100 100
  2. bar contains: 200 200 200 200 200
  3. 0x7ff040400020
  4. foo contains: 200 200 200 200 200
  5. bar contains: 100 100 100
  6. 0x7ff040400020