c++ 向量中的擦除函数
erase function in vector in c++
向量 v
中的数字是:2 6 9
n
是数组中的元素个数。
l
和 r
是索引(基于 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
如果 l
是 1
并且 r
是 1
,我只想删除第一个元素,如果 l
是 2
和 r
是 3
,我得到 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);
}
将打印 vector
的 for
循环更改为 for(int i = 0; i < v1.size(); i++)
。您目前正在删除元素,然后尝试打印它们,这是 未定义的行为。更改 for
循环可以纠正这一事实。
向量 v
中的数字是:2 6 9
n
是数组中的元素个数。
l
和 r
是索引(基于 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
如果 l
是 1
并且 r
是 1
,我只想删除第一个元素,如果 l
是 2
和 r
是 3
,我得到 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);
}
将打印 vector
的 for
循环更改为 for(int i = 0; i < v1.size(); i++)
。您目前正在删除元素,然后尝试打印它们,这是 未定义的行为。更改 for
循环可以纠正这一事实。