【问题标题】:Vector loops throwing 2 errors?向量循环抛出 2 个错误?
【发布时间】:2020-02-19 23:25:55
【问题描述】:

lab26.cpp:在函数“int meanUsingIterators(const std::vector&)”中:
lab26.cpp:35:13: error: no match for ‘operator/’(操作数类型是 ‘double’ 和 ‘std::vector::const_iterator {aka __gnu_cxx::__normal_iterator >}’)

平均值=总和/结束;

lab26.cpp:在函数“int meanUsingPointers(const std::vector&)”中:
lab26.cpp:51:13:错误:'double' 和'std::vector::const_pointer {aka const int*}' 类型的无效操作数到二进制'operator/'。

平均值=总和/结束;

================================================ ==============================

#include <vector>
#include <cmath>

using namespace std;

int meanUsingIndexing(const vector<int>& v)   
{

    vector<int>::size_type i, end = v.size();
    double sum = 0;
    double mean;

    for(i = 0; i < end; i++)
    {
        sum += v.at(i); // or sum += v[i]
    }
    mean = sum / end;
    return round(mean);
}

int meanUsingIterators(const vector<int>& v)  
{

    vector<int>::const_iterator i, end = v.cend();
    double sum = 0;
    double mean;

    for(i = v.cbegin(); i < end; i++)      
    {
        sum += *i;
    }
    mean = sum / end;
    return round(mean);
}

int meanUsingPointers(const vector<int>& v)    
{

    vector<int>::const_pointer i, end = v.data() + v.size();
    double sum = 0;
    double mean;

    for(i = v.data(); i < end; i++)
    {
        sum += *i;
    }
    mean = sum / end;
    return round(mean);
}

【问题讨论】:

  • 您正在尝试除以迭代器或指针。这也是错误所说的。但是您真正想要做的不是除以最后一个元素(或类似元素)的内存位置,而只是元素的数量。
  • 通过用逗号分隔声明 end = v.size() 与声明 i 的位置,将其声明为迭代器,您应该在单独的行上声明为整数。
  • @DetectivePikachu 不,那行已经在声明整数了。您正在查看错误的功能:P
  • 声明end 的行都没有声明整数,你到底在说什么?

标签: c++ vector mean


【解决方案1】:

no match for ‘operator/’ (operand types are ‘double’ and ‘std::vector::const_iterator.

所以,double 和它们之间带有除号的迭代器是造成这种情况的原因。

end = v.cend(); 时,您不能使用end 作为元素的数量(以获得平均值)。将mean = sum / end; 替换为mean = sum / v.size();

invalid operands of types ‘double’ and ‘std::vector::const_pointer.

这是一个double 和一个const*,它们之间有一个分隔符号,这就是问题所在。

end = v.data() + v.size(); 时,您不能使用end 作为元素的数量(以获得平均值)。将mean = sum / end; 替换为mean = sum / v.size();

【讨论】:

  • 这样一个愚蠢的错误。非常感谢!我花在这上面的时间超出了我的预期。
  • @JamesMcMillan 欢迎您!犯错误并陷入困境的情况并不少见。在沙发上呆 30 分钟往往会为我解决这个问题:-)
  • 我一定会考虑到这一点!我喜欢编码,但是这个数据结构课程让我很紧张哈哈!
猜你喜欢
  • 2013-12-21
  • 2013-12-18
  • 2014-06-06
  • 2011-07-10
  • 1970-01-01
  • 1970-01-01
  • 2016-07-19
  • 1970-01-01
  • 2021-12-13
相关资源
最近更新 更多