C++ for每个循环都会生成错误,但for(it=begin()…在遍历包含唯一ptr的std::map时不会';t
当我在C++ for每个循环都会生成错误,但for(it=begin()…在遍历包含唯一ptr的std::map时不会';t,c++,C++,当我在std::map上对每个样式的循环使用时,我得到了一个奇怪的错误,但当我对循环使用迭代器递增时,却没有得到这个错误。这是为什么 这不会产生任何错误: for(auto it = SubjectList.begin(); it!= SubjectList.end(); ++it){ Hist2D<int> h2d(25,25); } 错误是您的映射对不可复制,您需要迭代引用 for(auto& subject: SubjectList) 或者,如果您不
std::map
上对每个样式的循环使用时,我得到了一个奇怪的错误,但当我对循环使用迭代器递增时,却没有得到这个错误。这是为什么
这不会产生任何错误:
for(auto it = SubjectList.begin(); it!= SubjectList.end(); ++it){
Hist2D<int> h2d(25,25);
}
错误是您的映射对不可复制,您需要迭代引用
for(auto& subject: SubjectList)
或者,如果您不打算对元素进行变异,也应该使它们const
for(auto const& subject: SubjectList)
这是因为std::map
的每个元素都是
std::pair<std::string, std::unique_ptr<ListOfNumericLists<int>>
std::pair
为映射中的每个键/值对创建名为subject
的副本。由于您的值类型是无法复制的std::unique_ptr
,因此也无法复制该对。因此,错误将被忽略
试一试
相反
作为补充说明,迭代器循环当然可以正常工作,因为您甚至无法访问(更不用说尝试复制)映射的内容
for(auto& subject: SubjectList)
for(auto const& subject: SubjectList)
std::pair<std::string, std::unique_ptr<ListOfNumericLists<int>>
for(auto subject: SubjectList)
for(const auto &subject: SubjectList)