中易网

vector类里insert函数的一点问题

答案:2  悬赏:80  
解决时间 2021-03-05 23:06
比如一个vector类vec的大小为5,里面的元素全为1。然后一条语句 vec.insert(vec.end(),10),然后vec这个类里的元素个数就变为了6,10在元素的最后一位。这个我没问题,因为end()函数是返回最后一个元素的下一个元素。但是如果写这样一条语句 vec.insert(vec.begin(),20) ,根据结果,元素个数变为7,然后20会出现在第一个。而begin()函数明明是返回第一个元素,那么这个类的大小为什么会变大一个呢?我就理解不了?
最佳答案
那是因为vector的insert的函数原型是
iterator insert (iterator position, const value_type& val);实际效果是把val插入在position指向的元素的前面


因为
vec.end();返回的是最后一个元素的下一个位置,


所以
vec.insert(vec.end(),10);实际上是在“最后一个元素的下一个位置的前面插入10”,所以等价于在vec的最后插入10


vec.begin();返回第一个元素的位置,



所以
vec.insert(vec.begin(),20);实际上是“在第一个元素的前面插入20”,等价于在vec的最前面插入20
全部回答
不太明白你想问什么,我简单实现了下你的代码,没问题 #include  #include  class testvector :public std::vector { public:     int myinsert(int i)     {         insert(end(), i);         return 0;     } };     int main(int argc, char **argv) {     testvector tv;     tv.myinsert(200);     std::cout << tv.at(0) << std::endl;     return 0; }
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
ipad上的yy能打卡点心吗?
正方体有几个面,每个面都是什么形
求河神电视剧24集资源!!!拜托了
热水坐浴比较好还是温水坐浴比较好?
联兴大厦南座这个地址在什么地方,我要处理点
在驾驶证未满一年上高速被电子警察抓住超速怎
温州一医胃镜化验单可以提前一天去拿吗
既是5的倍数又是7的倍数,一定是合数对么
立方,四方,正交的区别??? 单斜,三斜的
车门闯了一条大坑,钣金最快多长时间啊,家里
增值税普通发票的税款可以抵扣吗?
寿衣殡葬用品批发地址在什么地方,想过去办事
爱亿宝网络机顶盒为啥只是不能看直播其他都能
英雄联盟输出上十万算高的吗
我用的是Illustrator CS4 中的渐变只有黑白的
推荐资讯
下海游泳要注意什么?
手机充电时指示灯亮但是充不进电是怎么回事
苹果笔记本PRO和AIR那个好,我一般不玩大型游
淄博职业学院校内有维修手机的吗
隔磁板,真的能隔开磁场吗//也就是说
电信手机无法微信注册不了怎么
顺发手机卖场地址在哪,我要去那里办事
这个电机是多少w的 可以承受多大控制器 72v的
小盆栽可以过长水机场安检么?
河北梦斯德露养殖有限公司在哪里啊,我有事要
九阴真经,厨师怎么学习精炖
华硕商用产品授权店地址在什么地方,想过去办
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?