c++ 向量中的擦除函数

erase function in vector in c++

向量 v 中的数字是:2 6 9

n是数组中的元素个数。 lr 是索引(基于 1 的索引),我必须从中删除向量中的元素

  vector<int> v(n, 0);
  for (int i = 0; i < n; i++)
  {
      int x;
      scanf("%d", &x);
      v[i] = x;
  }
  while (q--)
  {
      int l, r, ans = 0;
      scanf("%d", &l);
      scanf("%d", &r);
      vector<int> v1 = v;
      if (l == r)
          v1.erase(v1.begin() + (l - 1));
      else
          v1.erase(v1.begin() + (l - 1), v1.begin() + r);

当我在此处打印矢量时,我得到:

6 9 9

如果 l1 并且 r1,我只想删除第一个元素,如果 l2r3,我得到 2 6 9,但我想删除从第二个索引到第三个索引的元素:

for (int i = 0; i < n; i++)
    printf("%d\n", v1[i]);

rep(i, n)
{
    ans = gcd(ans, v1[i]);
}

printf("%d\n", ans);
}

将打印 vectorfor 循环更改为 for(int i = 0; i < v1.size(); i++)。您目前正在删除元素,然后尝试打印它们,这是 未定义的行为。更改 for 循环可以纠正这一事实。