C++ 中想要实现 装有子类对象的容器去初始化一个装父类对象的容器 5C

比如说:
vector<derived_class> vec1;
vector vec2 = vec1;

写代码过程中想要将装有不同子类的很多容器都传参到一个
函数(包含一个装有父类容器的形参)中做一些基本操作,想
通过这样的方式减少重复写多个相似函数

还是说我这样必须通过模板实现,可以给一些提示么

c++

7个回答

vector vec1;
vector vec2 = vec1;
1. 这里stl中的模板参数必须写全 也即vector vec2
2. 另外在c++的类世界里, 仅有引用和指针才可以将子类对象赋值给父类对象即 base_class* b = new derived_base(); 或 base_class& b = derived_class(); 所以这里的vector声明必须是vector或vector
3. 在c++的模板世界里, vector和vector是两个不同的类, 而vector提供的构造函数表面上满足你需要的, 仅有一个拷贝构造函数,因为是不同的类, 所以编译必然是会出错的。
幸好vector还提供了一个range con可以用来解决你的问题,
即vector dv;
vector bv(dv.begin(), dv.end());

vector vec1;
vector vec2 = vec1;
1. 这里stl中的模板参数必须写全 也即vector vec2;
2. 另外在c++的类世界里, 仅有引用和指针才可以将子类对象赋值给父类对象即 base_class* b = new derived_base(); 或 base_class& b = derived_class(); 所以这里的vector声明必须是vector或vector
3. 在c++的模板世界里, vector和vector是两个不同的类, 而vector提供的构造函数表面上满足你需要的, 仅有一个拷贝构造函数,因为是不同的类, 所以编译必然是会出错的。
幸好vector还提供了一个range con可以用来解决你的问题,
即vector dv;
vector bv(dv.begin(), dv.end());

ca原来是<>的内容被过滤掉了

  1. 另外在c++的类世界里, 仅有引用和指针才可以将子类对象赋值给父类对象即 base_class* b = new derived_base(); 或 base_class& b = derived_class(); 所以这里的vector声明必须是vector<base_class*>或vector<base_class&>
  2. 在c++的模板世界里, vector<base_class*>和vector<derived_class*>是两个不同的类, 而vector提供的构造函数表面上满足你需要的, 仅有一个拷贝构造函数,因为是不同的类, 所以编译必然是会出错的。 幸好vector还提供了一个range con可以用来解决你的问题, 即vector<derived_class*> dv; vector<base_class*> bv(dv.begin(), dv.end());

vector vec 就是定义了一个vector容器,可以通过
  vec.push_back(), push_font(),insert(position,value) 想vector中添加一个指定值
  list ilist<初始大小,默认赋值> list ilist(20 -1) 初始20个值为-1的list
  然后操作可以参考这些这些类封转的方法。
  关联容器:set map mutimap mutiset

就是应该用模板实现,这是最简单的。

Chase_Li
Chase_Li 嗯,谢谢提示,我去C++ primer补补模板的知识先
大约 2 年之前 回复

就是应该用模板实现,

vector vec 就是定义了一个vector容器,可以通过
  vec.push_back(), push_font(),insert(position,value) 想vector中添加一个指定值
  list ilist<初始大小,默认赋值> list ilist(20 -1) 初始20个值为-1的list
  然后操作可以参考这些这些类封转的方法。
  关联容器:set map mutimap mutiset

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问