在std :: list中保存std :: set

use*_*791 1 c++ list set

我是c ++编程的新手,有一些问题.

我有一套:

std::set<Proc*> finalProc = getFinalProc();
Run Code Online (Sandbox Code Playgroud)

我只是想将这个集合中的所有元素复制到一个列表中.我以为我必须遍历集合并保存列表中的元素?我想我犯了一个重大错误,但我无法找到解决方案:

std::list<Proc*> firstLevel;
for(std::set<Processor*>::iterator it = endProcessors.begin(); it != endProcessors.end(); ++it){
    firstLevel.push_back( ???? );
}
Run Code Online (Sandbox Code Playgroud)

想法是push_back所有迭代元素?

谢谢

sas*_*hka 8

有一个更好的方法来做到这一点:

std::list<Proc*> firstLevel(finalProc.begin(), finalProc.end());
Run Code Online (Sandbox Code Playgroud)

在你原来的代码,你应该已经取代????*itendProcessorsfinalProc

正如@ luk32所说,可能你有一个错误(如果你想复制实际数据,而不是指针).在这种情况下,您可以看到@ luk32解决方案,或者我会去std::unique_ptr这里(智能指针是在现代C++中管理内存的首选方式):

std::list<std::unique_ptr<Proc>> firstLevel;
for(const auto& ptr: finalProc){
    firstLevel.push_back(std::make_unique<Proc>(*ptr));
}
Run Code Online (Sandbox Code Playgroud)

超出firstLevel可见范围后,firstLevel中指针指向的所有内存将自动释放.

  • +1表示使用智能指针的建议.我有类似的代码,相信我,在复制指针时更容易释放元素两次,并且比看起来更频繁.我会更加强调它. (2认同)