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,我只想删除第一个元素,如果l2并且r3,我会得到2 6 9,但我想删除从第二个索引到第三个索引的元素:

for (int i = 0; i < n; i++)
    printf("%dn", v1[i]);
rep(i, n)
{
    ans = gcd(ans, v1[i]);
}
printf("%dn", ans);
}

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

最新更新