c++ - 如何修复 'invalid operands to binary expression' ?

标签 c++ arrays vector stl

我用 C++ 编写了以下程序,但出现了以下错误。好像是遍历二维 vector 的问题

我已经尝试编写 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;
}

最佳答案

这段代码有几个问题。

首先,性能:

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

每次调用该函数时,上面的代码都会无缘无故地复制矩阵及其所有元素。复杂度:O(n2).

最好通过对 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(n2),您的任务可以在 O(n) 中通过一个循环轻松执行。

关于c++ - 如何修复 'invalid operands to binary expression' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56871727/

相关文章:

c++ - 在 C++ 中计算字符串中的唯一单词

c++ - 为 3D 数组中的特定元素创建对象

c++ - 类型为 "const char *"的值不能分配给类型为 "char"的实体 C OOP

c++ - 按字符读取文件 C++

c++ - 用 ColeDateTimeSpan 将天数减去 ColeDateTime

javascript - 从数组中删除重复值

arrays - 在 VB.NET 中将多维数组分配给 DataGridView

objective-c - 当一个整数相加或相乘超过其限制时会发生什么

c++ - 如何搜索 vector 元素并替换它?

java - 如何在给定任意相机的情况下转换光线?