自己定义的向量插入和删除数据

首先感谢dalao的代码.... 人与人之间的差距真的是有五个脑子....

题目的要求是使用了vector 然后自己写插入和删除

【我】还没解决的:

1.序号问题(收藏了一篇博客准备看了....

2.index是个数值,是你想改变的那个数的序号,但以下代码未验证越界(溢出和负数)

3.HDU的题目里可能会有一些相关的吧... 感觉都是套路  希望熟练  希望一通ok

4.向量还不够,应该还会写几个上来,还有就是链表的....
所以最近是学什么前端呢还是代码能力呢.. 。。我怎么觉得算法更重要,唉及时整理,把小电脑翻新,然后去多刷几道杭电的吧.. 然后我觉得,持之以恒的代码能力和机器人应该比前段重要...   算了,虽然也很诱人还是只是先耳濡目染一下吧,现在好像自己的时间都没有,哦还有就是学会听歌写作业= =

[代码如下,我尽量把注释写的详细一点...]

#include<iostream>
#include<vector>
using namespace std;


void InsertItem(std::vector<int>&v,int item,int index){
// 【差错检验】 (.... 我好像只是少打了一个花括号
//{if(index>v.size()||index<1)
/// cout<<"Error!!";  return ;}
//  其实这一块可以用catch try语句 

 
if(index==v.size())
【如果正好插在最后面的话就是常规操作】

{ v.push_back(item);}
else

【如果不行的话,先定义一个temp去把v存起来,因为向量就像人体蜈蚣那个只能动头和尾,你要给他备份一下。】
{vector <int> temp=v;
v[index]=item;//【赋值操作!赋值操作!!!】 
【顺应题目的要求,在index处插入想插入的item】
【把右边item的值赋给左边的向量】
// 不知道++i  会不会出问题 
for(int i=index+1;i<=temp.size();i++)//  就是说, 到加一的时候都可以的 
 v[i]=temp[i-1]; 
//temp  是用来存储 v  的变量 
//  v要比temp大一个
// 原来的第i个在 第i-1个里面存着。。 
//所以把temp+1 给v 
v.push_back(temp[temp.size()-1]);} 
// 因为容量改变了,所以最后一个是Pushback进去 的
// 下标 也改了  这就很好 

for(int i=0;i<v.size();i++)
{cout<<v[i]<<" ";
}cout<<endl;
}



void RemoveItem(std::vector<int>&v,int index) 
{
//没有考虑index是负数,或者超出范围的情况
//HDU

//【popback不能index!!向量的特点】 
if(index==v.size())
v.pop_back();
else{
//正常情况下,删除了一个后面的要补上但是就会简单一点》。 吧
vector<int>temp=v; 
int bit=0;
for(int i=0;i<v.size();i++)
{ 
if(i!=index)
// 因为要插入特定的数据,这个思想。就要拆开放到另外一些地方去存着,哦恍恍惚惚哈哈哈、 
{v[bit]=temp[i];bit++;
// 好厉害啊 ...这样bit就比temp要小1 了
//index 跳过去没写, 其他数据都是一样的,最后popback了一下。。。 
}
} v.pop_back(); 

/*【画葫芦是不行的。。。popback只能从后面往前走。。】 
v.pop_back(index); 
for(int i=index;i<=temp.size();i++)// 没写 等号因为没了。直接就 
{ v[i]=temp[i+1];}} 

// 对第一个而言,v[index]=temp[index-1]
//v index 已经没有了,  v是小的 temp 是大的,所以
//temp-1=v 或者 v=temp+1 
} */





}
for(int i=0;i<v.size();i++)
cout<<v[i]<<" ";cout<<endl; 


}








int main(){
vector<int> v;
for(int i=0;i<10;i++)
v.push_back(i);

for(int i=0;i<v.size();i++)
cout<<v[i]<<" ";cout<<endl;


InsertItem(v,7,7);
RemoveItem(v,2);
 


return 0;
}

emmmm... 真的是太丑了

新的版本... 

.....括号什么的好像错了, 不管了,以前写的实在是太丑了!!!

czy说我代码缩进实在糟糕, 还真是糟糕的要命啊

//18.8.21
#include<iostream>
#include<vector>
using namespace std;
void InsertItem(std::vector<int>&v,int item,int index){
    if(index==v.size()){
        v.push_back(item);
    }
    else{
        vector <int> temp=v;
        v[index]=item;
        for(int i=index+1;i<=temp.size();i++)
            v[i]=temp[i-1]; 
        v.push_back(temp[temp.size()-1]);
    } 
    for(int i=0;i<v.size();i++){
        cout<<v[i]<<" ";
    }
    cout<<endl;
}
void RemoveItem(std::vector<int>&v,int index) {
    if(index==v.size())   v.pop_back();
    else{
        vector<int>temp=v; 
        int bit=0;
        for(int i=0;i<v.size();i++){ 
            if(i!=index){
                v[bit]=temp[i];
                bit++;
            }
        } 
        v.pop_back(); 
        v.pop_back(index); 
        for(int i=index;i<=temp.size();i++){
         v[i]=temp[i+1];
        }
     } 

}
    for(int i=0;i<v.size();i++)
    cout<<v[i]<<" ";
    cout<<endl; 
}

int main(){
    vector<int> v;
    for(int i=0;i<10;i++)
        v.push_back(i);
    for(int i=0;i<v.size();i++)
        cout<<v[i]<<" ";
    cout<<endl;
    InsertItem(v,7,7);
    RemoveItem(v,2);
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值