关于vector的push_back

degree_37 2009-04-10 11:23:07
STL里的vector容器push_back为什么还要求const呢,我经常是建立了一个新的临时对象,然后push_back 然后就会出错:

error C2664: 'std::vector<_Ty>::push_back' : cannot convert parameter 1 from 'Group *' to 'const Type &'

因为在vector的定义中:void push_back(const _Ty& _Val)

请问这个问题怎么解决? 难道被push_back的对象必须还要是const的? 那这种容器的局限性也就太大了吧,感觉不应该这样啊,应该是我理解错了吧?
...全文
755 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
melonsmile 2009-04-14
  • 打赏
  • 举报
回复
这个和const没有关系的;
const做为函数参数的限定符时,非const指针或者非const引用之外,const都会退化的。

找找其它原因!
heaventt 2009-04-12
  • 打赏
  • 举报
回复
STL里的vector容器push_back为什么还要求const呢,我经常是建立了一个新的临时对象,然后push_back 然后就会出错:

error C2664: 'std::vector <_Ty>::push_back' : cannot convert parameter 1 from 'Group *' to 'const Type &'

因为在vector的定义中:void push_back(const _Ty& _Val)

请问这个问题怎么解决? 难道被push_back的对象必须还要是const的? 那这种容器的局限性也就太大了吧,感觉不应该这样啊,应该是我理解错了吧?

贴个代码吧,这和const没什么关系吧,非const可以传给const的,搂住你记反了吧
beyond071 2009-04-10
  • 打赏
  • 举报
回复
学习中
祥子 2009-04-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 degree_37 的回复:]
引用 2 楼 mengde007 的回复:
藐视你的vector成员和要插入的对象的类型不同


我没有吧... 是什么类型的我就插入什么类型的啊
[/Quote]

怎么可能没有,很显然么。把指针当成引用值,自然出错了。
mengde007 2009-04-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 degree_37 的回复:]
因为我写了一个继承vector的类:

template <class Type>
class vectorChild <class Type> : public vector <class Type>
{
public:
int Contains(Type);
void AddUnique(Type);
void Remove(Type);
};

这样写是不不对?  错误N多...
[/Quote]哦,我知道你的意思了,由于push_back()成员仍然是vector的,你没有重写嘛,所以会出现类型不能
转化的问题,因为vector成员的类型未定……
yshuise 2009-04-10
  • 打赏
  • 举报
回复
最好不要继承。
template <class Type>
class vectorChild
{
private:
std::vector<Type> co;
public:
int Contains(Type);
void AddUnique(Type);
void Remove(Type);
};
degree_37 2009-04-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mengde007 的回复:]
藐视你的vector成员和要插入的对象的类型不同
[/Quote]

我没有吧... 是什么类型的我就插入什么类型的啊
yshuise 2009-04-10
  • 打赏
  • 举报
回复
template <class Type>
class vectorChild : public vector <class Type>
{
public:
int Contains(Type);
void AddUnique(Type);
void Remove(Type);
};
mengde007 2009-04-10
  • 打赏
  • 举报
回复
网速卡……
degree_37 2009-04-10
  • 打赏
  • 举报
回复
因为我写了一个继承vector的类:

template <class Type>
class vectorChild <class Type> : public vector <class Type>
{
public:
int Contains(Type);
void AddUnique(Type);
void Remove(Type);
};

这样写是不不对? 错误N多...
mengde007 2009-04-10
  • 打赏
  • 举报
回复
[Quote=引用楼主 degree_37 的帖子:]
STL里的vector容器push_back为什么还要求const呢,我经常是建立了一个新的临时对象,然后push_back  然后就会出错:

error C2664: 'std::vector <_Ty>::push_back' : cannot convert parameter 1 from 'Group *' to 'const Type &'

因为在vector的定义中:void push_back(const _Ty& _Val)

请问这个问题怎么解决?  难道被push_back的对象必须还要是const的?  那这种容器的局限性也就太大了吧,感觉不应该这样啊,应该是我理解…
[/Quote]藐视你的vector成员和要插入的对象的类型不同
yshuise 2009-04-10
  • 打赏
  • 举报
回复
贴代码
hiboys 2009-04-10
  • 打赏
  • 举报
回复
lz没必要继承vector。最好想别的实现
如果想学习用,可以参考c++的stack
vector::push_back(const Type &)是为了避免实参的值复制,不过就vector来说,
它是要将放入自己的元素复制一份的。我这样说是不是很迷惑。。。
哎。。。c++落日黄花了
yshuise 2009-04-10
  • 打赏
  • 举报
回复
template<typename T>//没有用这个
struct S<T>{
};
template<typename T>//我们用的是这个。
struct S{
};
yshuise 2009-04-10
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 degree_37 的回复:]
引用 5 楼 yshuise 的回复:
C/C++ codetemplate <class Type>
class vectorChild : public vector <class Type>
{
public:
int Contains(Type);
void AddUnique(Type);
void Remove(Type);
};


请问,这么写的继承了vector的vectorChild
想定义一个vectorChild <int> 这么写就不行了吧?
你那个应该写成class vectorChild <class Type>: public vector <class Type>吧?

[/Quote]
那就更简单了:

class vectorChild : public vector <int>
{
public:
int Contains(Type);
void AddUnique(Type);
void Remove(Type);
};

vectorChild<int>
vectorChild <double>
vectorChild <float>
等等就可以用我写的模板。
必成桂 2009-04-10
  • 打赏
  • 举报
回复
push_back(const _Ty& _Val) 的const的意思是这个引用是const的,你不能在函数里修改这个引用指向的值

但是vector里储存的对象,不是const的。绝对不是。

你想要在vector里存指针,声明的时候需要这样声明: vector<int *> ver;(加入是int型的指针)
degree_37 2009-04-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yshuise 的回复:]
C/C++ codetemplate <class Type>
class vectorChild : public vector <class Type>
{
public:
int Contains(Type);
void AddUnique(Type);
void Remove(Type);
};
[/Quote]

请问,这么写的继承了vector的vectorChild
想定义一个vectorChild<int> 这么写就不行了吧?
你那个应该写成class vectorChild <class Type>: public vector <class Type>吧?
taodm 2009-04-10
  • 打赏
  • 举报
回复
楼主还是找本《STL.Tutorial.and.Reference.Guide》中文版,重新系统地学一下stl吧。
degree_37 2009-04-10
  • 打赏
  • 举报
回复
其实上面的错误应该主要在于const吧?
degree_37 2009-04-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 rfn1785 的回复:]
怎么可能没有,很显然么。把指针当成引用值,自然出错了。
[/Quote]

只是列举的那个是指针了,但是vector里是可以放指针的啊

下面这个也是程序中的错误:这个不是用的指针,怎么解释呢?
error C2664: 'std::vector<_Ty>::push_back' : cannot convert parameter 1 from 'Vertex_with_ID' to 'const Type &'

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧