vector类里insert函数的一点问题
答案:2 悬赏:80
解决时间 2021-03-05 23:06
- 提问者网友:你在我眼中是最帅
- 2021-03-05 15:49
比如一个vector类vec的大小为5,里面的元素全为1。然后一条语句 vec.insert(vec.end(),10),然后vec这个类里的元素个数就变为了6,10在元素的最后一位。这个我没问题,因为end()函数是返回最后一个元素的下一个元素。但是如果写这样一条语句 vec.insert(vec.begin(),20) ,根据结果,元素个数变为7,然后20会出现在第一个。而begin()函数明明是返回第一个元素,那么这个类的大小为什么会变大一个呢?我就理解不了?
最佳答案
- 二级知识专家网友:哥在撩妹请勿打扰
- 2021-03-05 15:56
那是因为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
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
全部回答
- 1楼网友:随心随缘不随便
- 2021-03-05 16:39
不太明白你想问什么,我简单实现了下你的代码,没问题
#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;
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯