在指针向量c ++中存储新对象
Posted
技术标签:
【中文标题】在指针向量c ++中存储新对象【英文标题】:Storing new object in pointer vector c++ 【发布时间】:2020-08-17 16:19:11 【问题描述】:使用以下代码,我需要将新对象存储在指针向量中。我已经完成了,但现在它不会显示有关循环中对象的任何信息(我在哪里通过向量)。在类 Tvrtka(公司)中,我有 Zaposlenik(工人)的指针向量。对于我存储的每个对象,它都会转到向量。
class Tvrtka
public:
string oib;
string naziv;
string adresa;
vector<const Zaposlenik*> zaposlenici;
Tvrtka()
Tvrtka(const string _oib, const string _naziv,const string _adresa, vector<const Zaposlenik*> _z)
this->oib=_oib;
this->naziv=_naziv;
this->adresa=_adresa;
for(int i=0;_z.size();i++)
zaposlenici.push_back(_z[i]);
主要部分:
vector<const Zaposlenik*>zaposlenici;
Zaposlenik *z1=new Zaposlenik("Marko", "maric", 20);
zaposlenici.push_back(z1);
Tvrtka t1("198","Majur", "2222", zaposlenici);
for(int i=0;i<zaposlenici.size();i++)
cout<<zaposlenici[i]->ime;
如果我评论 t1(Tvrtka 的对象),它会显示有关工人的信息。
【问题讨论】:
请编辑您的问题以包含minimal reproducible example、预期行为以及您得到的结果。Tvrtka
ctor 中的注意循环是完全多余的,复制向量(或赋值)的 ctor 会导致完全相同的结果。
回滚,因为这个版本更接近完成(虽然没有完成)
@MikeCAT 通过回滚你的回答无效:)
@Slava 你是什么意思?
【参考方案1】:
在这个循环中
for(int i=0;_z.size();i++)
zaposlenici.push_back(_z[i]);
_z.size()
用作循环条件,这与i
无关。
这意味着如果您将非空向量作为_z
传递,则循环将无限循环,并且将耗尽内存。
应该是
for(int i=0;i<_z.size();i++)
zaposlenici.push_back(_z[i]);
或者干脆
for(auto& elem : _z)
zaposlenici.push_back(elem);
【讨论】:
或者干脆zaposlenici = _z;
我的条件错误,tnx 伙计们。是我<_z>
@Momo 这就是为什么最好不要编写冗余代码,这样可以减少出错的机会。以上是关于在指针向量c ++中存储新对象的主要内容,如果未能解决你的问题,请参考以下文章
C ++:在向量中插入啥 - 指针或引用,向量何时复制它的元素?