我之前就已经写过关于向量的文章,有兴趣的朋友可以点搜索按钮搜一下vector,在这里我放一段程序来演示向量的用法。

#include <iostream>
#include <vector>
using namespace std;

int main()
{
  // 定义一个初始长度为10的向量A, 可用位置数为10.
  vector<int> A(10);
  // 下标i从0到A.size() - 1对A中每个元素赋值i.
  // 为简便起见这里使用size_t型, 实际上i应该用vector<int>::size_type型.
  // 向量的下标用法与数组相同, 但要注意应保证向量中实有元素个数就是size().
  for (size_t i = 0; i < A.size(); ++i)
    A[i] = static_cast<int>(i);
  // 使用迭代器iter对向量A中每个元素赋值1.
  // 迭代器可从向量的开始到结束, 类似指针.
  // 要注意begin()和end()的用法: begin()位置是首元素, 而end()位置没有元素存在.
  // iter为vector<int>::iterator型, 可用auto关键字配合赋值语句自动获取其类型.
  for (auto iter = A.begin(); iter != A.end(); ++iter)
    *iter = 1;

  // 定义一个长度为5的向量B, 初始元素全为3.
  vector<int> B(5, 3);
  // 在向量B末尾加入100个2.
  B.resize(B.size() + 100, 2);
  // 在向量B的尾部加入4.
  B.push_back(4);
  // 迭代器的另一种用法
  auto iter = B.begin();
  for (size_t i = 0; i < B.size(); ++i)
    *(iter + i) *= 2;  //类似B[i] = B[i]*2
  // 若向量B不为空, 则持续输出其尾部元素并删除之.
  while(!B.empty())
  {
    cout << B.back() << endl; // 输出向量B的末尾元素
    B.pop_back();             // 删除向量B的末尾元素
  }

  // 接收未知长度的自然数输入序列, 以负数作为输入终止. C初始为空向量.
  vector<int> C;
  int data;
  // 基于push_back操作的速度非常快.
  for (cin >> data; data >= 0; cin >> data)
    C.push_back(data);
  for (const auto& x : C)
    cout << x << endl;

  // 向量的初始化列表.
  vector<int> D = {4, 2, 1, 5, 3};

  return 0;
}
立志成为一名攻城狮
最后更新于 2020-01-02