从向量中删除元素(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索引。