【问题标题】:C++ list: copying a local list in a member listC++ 列表:在成员列表中复制本地列表
【发布时间】:2013-12-27 00:41:46
【问题描述】:

在一个方法中,我有一个局部变量

std::list<proiezione> ora;    

和同类型的成员变量

std::list<proiezione> orb;   

在我的方法中,我有

for (std::list<proiezione>::iterator it = ora.begin(); it != ora.end(); ++it)
    this->orb.push_back(*it);

但不起作用!

this->mem 是空的!为什么?

准确地说:

class CMFCApplication4Doc : public CDocument
{
public:
std::map<CString, Esame> esami;
INT valore_lode;
proiezione pr;
std::list<proiezione> orb;
    void get_proiezione(FLOAT media_desiderata);
}

void CMFCApplication4Doc::get_proiezione(FLOAT   media_desiderata)
{
    std::list<proiezione> ora;
std::vector<CString> v_proiezione;
CString appoggio;
std::map<CString, Esame> es = esami;
calcola_proiezione(ora,&pr, es, media_desiderata,valore_lode);
for (std::list<proiezione>::iterator it = ora.begin(); it != ora.end(); ++it)
    this->orb.push_back(*it);
 ecc ecc (I don't touch orb anymore)

} 

在调试模式下,“ora”有 25 个元素,但“this->orb”有零个元素!

【问题讨论】:

  • mem = or; 应该根据您的标题来判断。 insert 如果您真的想要附加列表。
  • or 是 2.12/2 的保留标识符(|| 的替代拼写)。
  • 同样的行为也改变了名字:(

标签: c++ list methods std member


【解决方案1】:

为什么不使用std::copy 算法?

std::copy(tList.begin(), tList.end(), std::back_inserter(mem));

或使用复制交换:

void MyClass::func(std::list<proiezione> tList)
{
    mem.swap(tList);
}

或使用assign 成员:

mem.assign(tList.begin(), tList.end());

或者使用复制赋值操作符:

mem = tList;

如果没有看到更多代码,很难告诉你为什么它是空的。

差点忘记了(感谢 Casey 提醒我):or 实际上是一个保留字,因此您需要将变量命名为其他名称。

【讨论】:

  • @volperossa calcola_proiezione的声明和实现是什么?
  • 这不是问题。我也尝试了同样的结果://calcola_proiezione(ora,&amp;pr, es, media_desiderata,valore_lode); std::list&lt;proiezione&gt; test; proiezione nuova; test.push_back(nuova); for (std::list&lt;proiezione&gt;::iterator it = test.begin(); it != test.end(); ++it) this-&gt;orb.push_back(*it); results: orb.size()=0; test.size()=1 我认为问题出在 orb 的声明中;我应该将它初始化为任何值吗??
  • 您初始化orb 的方式没有任何问题(至少在您提供的代码中没有显示)。声明时不需要初始化列表,因为它的默认构造函数会这样做。
猜你喜欢
  • 2014-04-07
  • 2011-01-27
  • 2021-10-19
  • 2011-04-15
  • 2011-12-01
  • 1970-01-01
  • 2015-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多