vector向量(dynamic arrays)

  1. vector<int> v;
  2. v.push_back(3); // [3]
  3. v.push_back(2); // [3,2]
  4. v.push_back(5); // [3,2,5]
  5. cout << v[0] << "\n"; // 3
  6. cout << v[1] << "\n"; // 2
  7. cout << v[2] << "\n"; // 5
  8. for (int i = 0; i < (int)v.size(); i++) {
  9. cout << v[i] << "\n";
  10. }
  11. vector<int> v;
  12. v.push_back(5);
  13. v.push_back(2);
  14. cout << v.back() << "\n"; // 2
  15. v.pop_back();
  16. cout << v.back() << "\n"; // 5
  17. // size 10, initial value 0
  18. vector<int> v(10);
  19. // size 10, initial value 5
  20. vector<int> v(10, 5);
  21. // vector的排序
  22. sort(v.begin(), v.end());
  23. reverse(v.begin(), v.end());
  24. sort(v.rbegin(), v.rend());
  25. // int a[N]的排序
  26. sort(a, a+n);
  27. reverse(a, a+n);
  28. // 倒序,这个要注意一下OJ是否支持
  29. sort(a, a + n, greater<int>());
  1. // 【要点】(int)A.size()
  2. // vector中size函数的返回值是一个无符号类型
  3. // 当size是0的时候,对其进行减1,会造成数字的越界溢出
  4. #include <bits/stdc++.h>
  5. using namespace std;
  6. vector<int> A;
  7. int main(){
  8. cout << A.size() << ' ' << A.size() - 1 << '\n';
  9. return 0;
  10. }
  11. // 输出 0 18446744073709551615
  12. #include <bits/stdc++.h>
  13. using namespace std;
  14. vector<int> A;
  15. int main(){
  16. cout << A.size() << ' ' << (int)A.size() - 1 << '\n';
  17. return 0;
  18. }
  19. // 输出 0 -1
  20. //【注意】for(int i = 0; i < (int)A.size(); i++){} 要写一个强制取整
  1. // 去重
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4. vector<int> A;
  5. int n;
  6. void print(){
  7. for (auto x : A) printf("%d ", x);
  8. puts("");
  9. }
  10. int main()
  11. {
  12. cin >> n;
  13. for (int i = 0; i < n; i++){
  14. int x; cin >> x;
  15. A.push_back(x); // 3 2 1 2 1
  16. }
  17. sort(A.begin(), A.end());
  18. print(); // 1 1 2 2 3
  19. vector<int>::iterator it = unique(A.begin(), A.end());
  20. print(); // 1 2 3 2 3
  21. A.erase(it, A.end()); // 1 2 3
  22. print();
  23. return 0;
  24. }
  1. // 重点代码
  2. vector<int> A;
  3. sort(A.begin(), A.end());
  4. A.erase(unique(A.begin(), A.end()), A.end()); // 这样就可以得到一个去重后的vector
  1. // resizing vector
  2. #include <iostream>
  3. #include <vector>
  4. int main ()
  5. {
  6. std::vector<int> myvector;
  7. // set some initial content:
  8. for (int i=1;i<10;i++) myvector.push_back(i);
  9. myvector.resize(5);
  10. myvector.resize(8,100);
  11. myvector.resize(12);
  12. std::cout << "myvector contains:";
  13. for (int i=0;i<myvector.size();i++)
  14. std::cout << ' ' << myvector[i];
  15. std::cout << '\n';
  16. return 0;
  17. }
  18. // myvector contains: 1 2 3 4 5 100 100 100 0 0 0 0

为什么c++中vector的size()造成了死循环?

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main(){
  4. vector<int> book(800);
  5. //造成死循环
  6. for(int i=0;i<book.size()-900;i++){
  7. cout<<"hello"<<endl;
  8. }
  9. //不会造成死循环
  10. for(int i=0;i<(int)book.size()-900;i++){
  11. cout<<"hello"<<endl;
  12. }
  13. }
  1. book.size()是无符号整形,无符号整形减去有符号整数,且差值为负,这样就导致溢出。
  2. 所以你看到的是死循环。但是溢出也是有个值的,一直运行下去,也会结束,只是这个值很大。
  3. 你直接把book.size()写成(intbook.size() ,运行结果必定不会进去循环语句,
  4. 得出的差值是-100.已经被转换成整数了
  1. // 关于.size()函数的返回值,是一个unsigned int
  2. // 还有一个案例
  3. // http://ybt.ssoier.cn:8088/problem_show.php?pid=1143
  4. // 1143:最长最短单词
  5. // 在这个代码中if (temp.size() > maxn), 这个不等式,不能得到预期效果
  6. // printf发现一直都不成立,很是奇怪 左边是无符号整型 右边是有符号整型
  7. // 如果加一个(int)temp.size()就会立刻好用
  8. // 测试数据
  9. // I am studying Programming language C in Peking University
  10. #include<bits/stdc++.h>
  11. using namespace std;
  12. string s;
  13. string maxs, mins;
  14. int maxn = -1, minn = 2e9;
  15. bool check(int i){
  16. if (s[i] == ' ' || s[i] == ',') return false;
  17. return true;
  18. }
  19. int main(){
  20. getline(cin, s);
  21. for (int i = 0, len = s.size(); i < len; i++){
  22. int j = i;
  23. string temp;
  24. while (j < len && check(j)) temp += s[j++];
  25. cout << temp.size() << ' ' << maxn << ' ' << minn << '\n';
  26. if (temp.size() > maxn){
  27. maxn = (int)temp.size();
  28. maxs = temp;
  29. }
  30. if (temp.size() < minn){
  31. minn = (int)temp.size();
  32. mins = temp;
  33. }
  34. i = j;
  35. while (i < len && !check(i)) i++;
  36. i--;
  37. }
  38. cout << maxs << '\n' << mins << '\n';
  39. return 0;
  40. }