从向量中删除元素(hackerrank) 我是C++初学者。我试图解决问题,但无法解决,因此我在事后检查了解决方案,但有几行我不明白: v.erase(v.begin()+x-1);//我想知道为什么把“-1”放在这里 v、 擦除(v.begin()+b-1,v.begin()+c-1);

从向量中删除元素(hackerrank) 我是C++初学者。我试图解决问题,但无法解决,因此我在事后检查了解决方案,但有几行我不明白: v.erase(v.begin()+x-1);//我想知道为什么把“-1”放在这里 v、 擦除(v.begin()+b-1,v.begin()+c-1);,c++,vector,erase,C++,Vector,Erase,代码如下: intmain() { int N,a,x,b,c; 向量v; cin>>N; 对于(int i=0;i>a; v、 推回(a); } cin>>x>>b>>c; v、 擦除(v.begin()+x-1); v、 擦除(v.begin()+b-1,v.begin()+c-1); cout这个问题旨在让您熟悉向量擦除方法的两种常见语法 . 对于删除单个元素使用 v、 擦除(传递指向要擦除的元素的迭代器) 例如,v.erase(v.begin())将删除向量的第一个元素,或者换句话说,将

代码如下:

intmain()
{
int N,a,x,b,c;
向量v;
cin>>N;
对于(int i=0;i>a;
v、 推回(a);
}
cin>>x>>b>>c;
v、 擦除(v.begin()+x-1);
v、 擦除(v.begin()+b-1,v.begin()+c-1);

cout这个问题旨在让您熟悉向量擦除方法的两种常见语法 . 对于删除单个元素使用

v、 擦除(传递指向要擦除的元素的迭代器)

例如,
v.erase(v.begin())
将删除向量的第一个元素,或者换句话说,将删除向量位置0处的元素

因为这里
v.begin()
是向量第一个元素的迭代器,只要向量不是空的

同样地

v.erase(v.begin() + x -1);
擦除向量x位置的元素

现在要擦除向量中的一个范围,使用重载擦除方法。它的用法如下:

v、 擦除(iter1、iter2)

它将擦除iter1到iter2范围内的所有元素,但不包括iter2,即范围[iter2,iter2]内的元素将被擦除。请记住,iter2不会被擦除。 所以这个代码,

v.erase(v.begin() + b - 1, v.begin() + c - 1);
将删除从索引b到索引c的所有元素,但不包括索引c。

\include//Header部分
#include <cmath>           //Header section
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;


int main() {  
    vector<int> v;            //initializing vector v
    int n,i,b,c,d,size,val;
    cin>>n;                   //no. of integers in vector v
    for(i=0;i<n;i++)          
    {
        cin>>val;
        v.push_back(val);     /*syntax for input elements in vector, "val" is the 
                                    element*/
    }
    cin>>b;   // input position of element to be erased

    cin>>c>>d;  //input range of elements to be erased

    v.erase(v.begin()+b-1); // func to be used to erase an element

    v.erase(v.begin()+c-1,v.begin()+d-1) // func used to erase a range

    size=v.size();
    cout<<size<<endl;
    for(i=0;i<size;i++)
    {
        cout<<v[i]<<" ";  //leftover elements output
    }
    return 0;
}
#包括 #包括 #包括 #包括 使用名称空间std; int main(){ 向量v;//初始化向量v int n,i,b,c,d,size,val; cin>>n;//向量v中的整数数 对于(i=0;i>val; v、 push_back(val);/*矢量中输入元素的语法,“val”是 元素*/ } cin>>b;//要擦除的元素的输入位置 cin>>c>>d;//要擦除的元素的输入范围 v、 擦除(v.begin()+b-1);//用于擦除元素的func v、 擦除(v.begin()+c-1,v.begin()+d-1)//func用于擦除范围 大小=v.大小();
如HackerRank上所述,这个问题假设基于
1
的索引(如R、Matlab)C++没有,并且开始从<代码> 0代码>代码。这几乎是所有它的全部。通常只给出答案的描述而不是仅仅用注释来张贴一个代码块。OP只是询问关于什么“代码>:ST:::vector::擦除< /代码>正在执行,以及为什么在<迭代器算术上使用<代码> -1 < /C>。@Himanshu--谢谢你的贡献。你能解释一下你的代码是如何帮助未来的读者和作者的吗?也许值得一提的是,问题中提出的
-1
是由于
x
b
c
是1索引而不是0索引。