leetcode/notes/src/stl_vector.md

1.8 KiB
Raw Blame History

向量

#include <algorithm>
#include <iostream>
#include <vector>

int main(int argc, const char *argv[]) {
  // 初始化
  std::vector<int> v1;
  // 创建长度为 10 的向量(缺省值填充)
  std::vector<int> v2(10);
  // 创建长度为 10值为 7 的向量
  std::vector<int> v3(10, 7);
  // 从另一个向量深拷贝
  std::vector<int> v4 = v2;

  // 释放内存
  v4.clear();
  v4.shrink_to_fit();

  // 修改数据
  v3[1] = 100;
  // 删除数据,传递进去的参数是迭代器
  v3.erase(v3.begin() + 1);
  v3.erase(v3.begin() + 3, v3.end());
  // 插入到尾部
  v3.push_back(67);
  // 弹出尾部元素
  v3.pop_back();
  // 插入到最前面和最后面
  // 意思是插入完成后,第一个参数所在位置的值是第二个参数
  v3.insert(v3.begin(), 2);
  v3.insert(v3.end(), 2);
  // 访问第一个数和最后一个数
  std::cout << v3.front() << " " << v3.back() << std::endl;
  // 合并两个向量
  // 意思是把 v2 向量插入到 v3 的尾部
  v3.insert(v3.end(), v2.begin(), v2.end());

  // 交换 v3 和 v2相当于把 v3 的内容覆盖到 v2把 v2 的内容覆盖到 v3
  v3.swap(v2);
  // 重新调整大小
  // 如果传入的参数超过了向量原本的长度,则在扩展后的末尾填充缺省值
  // 如果传入的参数小于向量原本的长度,则只保留前 N 个元素,后面的部分删掉
  v3.resize(10);
  // 如果传入的参数超过了向量原本的长度,则在扩展后的末尾填充 99
  v3.resize(15, 99);
  // 查找最大值和最小值,返回的是一个指针
  // #include <algorithm>
  std::cout << *std::max_element(v3.begin(), v3.end()) << std::endl;
  std::cout << *std::min_element(v3.begin(), v3.end()) << std::endl;

  for (int i = 0; i < v3.size(); ++i) {
    std::cout << v3[i] << " ";
  }
  std::cout << std::endl;
}