温馨提示:本文翻译自stackoverflow.com,查看原文请点击:c++ - How to fix 'invalid operands to binary expression'?
arrays c++ stl vector

c++ - 如何修复“无效的操作数到二进制表达式”?

发布于 2020-03-27 11:31:45

我用C ++编写了以下程序,但出现了以下错误。遍历2D向量似乎是一个问题

我已经尝试过写作,int j = matrix.at(0).begin()但效果不佳

我遇到以下错误

 invalid operands to binary expression ('vector<int>::iterator' (aka '__wrap_iter<int *>') and 'std::__1::vector<int, std::__1::allocator<int> >::size_type' (aka 'unsigned long'))


no viable conversion from 'std::__1::vector<std::__1::vector<int, std::__1::allocator<int> >, std::__1::allocator<std::__1::vector<int, std::__1::allocator<int> > > >::iterator' (aka '__wrap_iter<std::__1::vector<int, std::__1::allocator<int> > *>') to 'int'
#include <stdio.h>
#include <vector>
#include <iterator>
using namespace std;

int diagonalSum(vector<vector<int> > matrix) {
    int sum[2] = {0};
    vector<int> s;
    for(int i = matrix.begin();i < matrix.size();i++)
    {
        for(int j = matrix[i].begin();j < matrix.[i].size();j++)
        {
            if(i == j)
                sum[0]+=matrix[i][j];
            if((i+j) == matrix.size())
                sum[1]+=matrix[i][j];
        }
    }
        return (sum[0] + sum[1]);
}
int main()
{
    vector <vector<int> > matrix = {
            {2,4,6},{4,8,12},{6,12,18}
    };
    int dSum = diagonalSum(matrix);
    return 0;
}

查看更多

查看更多

提问者
Taher Lunawadi
被浏览
289
Michael Veksler 2019-07-03 23:09

这段代码有几个问题。

一,性能:

int diagonalSum(vector<vector<int> > matrix) {

每次调用函数时,上面的方法都会复制矩阵及其所有元素,这没有明显的原因。复杂度:O(n 2)。

更好地引用const(复杂度O(1)):

int diagonalSum(const vector<vector<int> > & matrix) {

然后,代码尝试从中复制一个迭代器对象,matrix.begin()对象应该在类型的对象上进行迭代vector<int>,并尝试将此迭代器分配给一个整数变量。整数和迭代器是不兼容的类型,不能互相分配,因此会出错。

我假设您想使用索引来代替:

for(int i = 0;i < matrix.size();i++)
{
    for(int j = 0; j < matrix[i].size();j++)

从复杂性的角度来看,这甚至是一个不好的解决方案。您的解决方案是O(n 2),其中您的任务可以轻松地在O(n)中执行一次循环。