【问题标题】:Find max value in a vector of objects在对象向量中查找最大值
【发布时间】:2012-06-25 12:03:36
【问题描述】:

我有一个 B 类中对象 A 的向量 v,其中每个对象都有一个成员:int 级别。我想找到向量v中所有对象的级别的最大值。为此我使用了函数:

int B::findMaxLevel()
{
vector<int> levels;
vector<A*>::iterator it;

for(it=v.begin();it!=v.end();++it)
{
    if(find(levels.begin(), levels.end(), (*it)->getLevel())!=levels.end())
        levels.push_back((*it)->getLevel());
}

return *max_element(levels.begin(), levels.end());

}

但是我得到错误:断言失败,向量迭代器不可延迟。 我应该另外定义一个 int 迭代器吗?有没有更好的方法来实现我想要的功能?

【问题讨论】:

  • 您在哪一行收到此错误消息?
  • 如果v 为空,然后levels 为空,max_element 返回levels.end() 怎么办?
  • max_element 长什么样子?
  • @Mohammad 啊! using namespace std; 不好的一个很好的例子。

标签: c++ vector iterator max


【解决方案1】:

我猜你的问题出在最后一行。空向量将导致该行出现此错误。

实际上你根本没有填写levels。应该是==levels.end() 而不是!=levels.end()

另外,看看here中的示例代码,并尝试使用用户指定的比较函数对象而不是多个副本。

    template <class ForwardIterator, class Compare>
    ForwardIterator max_element ( ForwardIterator first, ForwardIterator last, Compare comp );

【讨论】:

    【解决方案2】:

    这似乎正是您在使用解决方案 http://www.cplusplus.com/forum/general/18226/ 时遇到的问题

    【讨论】:

      猜你喜欢
      • 2015-10-11
      • 2011-12-24
      • 1970-01-01
      • 2018-07-09
      • 1970-01-01
      • 2018-04-08
      • 1970-01-01
      • 1970-01-01
      • 2019-04-22
      相关资源
      最近更新 更多