那里。我在这里搜索了我的问题,但没有找到任何相关的信息。 这是问题所在。
我在我的程序的一部分中有这样的代码,通过插入做了一种愚蠢的排序。
我开发的MSVS 2008中,它都运行良好,但是当我试图用g ++编译时,由于下面的list::insert函数失败;stl vector :: insert在Windows和linux中的区别?
//...
pair NewElem(i, Prob.at(i));
bool inserted(false);
vector >::const_iterator li = NewList.begin();
for (vector::const_iterator ji = BlocksMemory.begin() ; ji != BlocksMemory.end() ; ++ji)
{
if (NewElem.second <= *ji)
li += _SORT_BLOCK;
else
break;
}
for(;li != NewList.end() ; ++li)
{
if (NewElem.second > li->second)
{
NewList.insert(li, NewElem);
inserted = true;
break;
}
}
如人们可以看到,li是NewListconst_iterator; 和NewElem的类型为pair,内容类型与NewList内容相同;
在那里,你可以看到响应(不可读):
main.cpp:447: error: no matching function for call to " std::vector<:pair int double>, std::allocator<:pair int double> > >::insert(__gnu_cxx::__normal_iterator*, std::vector<:pair int double>, std::allocator<:pair int double> > > >&, std::pair&) "
/usr/include/c++/4.4/bits/vector.tcc:106: note: candidates are: __gnu_cxx::__normal_iterator::_Tp_alloc_type::pointer, std::vector<_tp _alloc> > std::vector<_tp _alloc>::insert(__gnu_cxx::__normal_iterator::_Tp_alloc_type::pointer, std::vector<_tp _alloc> >, const _Tp&) [with _Tp = std::pair, _Alloc = std::allocator<:pair int double> >]
/usr/include/c++/4.4/bits/stl_vector.h:850: note: void std::vector<_tp _alloc>::insert(__gnu_cxx::__normal_iterator::_Tp_alloc_type::pointer, std::vector<_tp _alloc> >, size_t, const _Tp&) [with _Tp = std::pair, _Alloc = std::allocator<:pair int double> >]
什么能是什么原因?什么是可能的解决方案?