如何修复"二进制表达式的无效操作数"?
How to fix 'invalid operands to binary expression'?
我在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;
}
此代码有几个问题。
首先,性能:
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 (,其中可以在一个环中轻松执行您的任务。
vector.begin((方法返回 an iterator 指向向量中的第一个元素。这就是为什么您无法将其分配给Int变量。
将您的循环更改为此
for(int i = 0;i < matrix.size();i++)
{
for(int j = 0;j < matrix[i].size();j++)
{
if(i == j)
sum[0]+=matrix[i][j];
if((i+j) == (matrix.size() -1))
sum[1]+=matrix[i][j];
}
}
相关文章:
- 类型"int"和"const char [15]"到二进制"运算符<<"的无效操作数^
- 二进制表达式 cout 问题的无效操作数
- 二进制'operator+' 'int*'和'int*'类型的无效操作数
- 'const char [26]' 和 'LPSTR ' 类型的无效操作数
- 如何修复"二进制表达式的无效操作数"?
- 如何将无效操作数修复为二进制表达式
- 错误:二进制表达式('float' 和 'float')返回的无效操作数 (x & (1 << 31)) == 0
- 加密注释C++具有无效操作数的编译错误
- 如何将无效操作数修复为带有字符串的二进制表达式?
- 模板 &&运算符中的无效操作数+
- 类型别名和运算符<<使用 ostream_iterator 重载会导致无效操作数
- 类型为"double" snd const char [3]' 到二进制'operator<<'的无效操作数
- 二进制表达式的语义问题无效操作数("双精度"和"双精度")
- 'double' 和 'const char [2]' 到二进制"运算符!="的无效操作数|
- 具有重载运算符<<的无效操作数
- 'double' 和 'double' 类型的无效操作数
- 整数和无效操作数中的小数*已更新
- 二进制'operator<<' 'const char [6]'和'const char [3]'类型的无效操作数
- 将算法c++的无效操作数替换为二进制表达式
- 'char*'和'const char [2]'到二进制'operator+'类型的 C++ 无效操作数