lambda 表达式的预期主体 val4 = arr[val2], [val3];
这行val4 = arr[val2], [val3]; 似乎有语法错误,而不是您在问题中提到的那个。
我假设你的意思是写 val4 = arr[val2][val3]; 不带逗号。
话虽如此,val2 和 val3 的值被分配了相同的值,如果未选中,可能会导致索引越界异常。此外,从 -1 开始 counter 和 counterx 会导致越界异常。
此外,如果不将多维数组作为双指针传递或对大小进行硬编码,则无法将多维数组传递给函数。
编辑 1:
我整理了一个解决方案来查找每行中的最大数量。它不是最优化的代码,但它快速且有效。我假设行,列大小可能会改变,所以我使用 std::vector 而不是 std:array 或原始数组。但是,如果您知道可以将 int[3][3] 硬编码到您的解决方案中,则可以恢复。
#include <iostream>
#include <iterator>
#include <iostream>
#include <algorithm>
#include <array>
void findit(std::vector<std::vector<int>> arr){
for (size_t rowsIndex = 0; rowsIndex <= arr.size(); rowsIndex++){
std::vector<int> row = arr[rowsIndex];
int maxNum = *std::max_element(row.begin(), row.end());
std::cout<< "largest num in row " << rowsIndex << ": " << maxNum << std::endl;
}
}
int main(){
std::vector<std::vector<int>> arr;
arr.push_back({0, 1, 2 });
arr.push_back({4, 5, 6 });
arr.push_back({8, 9, 10});
findit(arr);
}
编辑 2:
如果你想检查一个目标索引与相邻的索引,没有必要使用 forloop。只有 4(或 8)个可能的缺陷需要检查,只是更容易(和有效)对它们进行硬编码:
#include <iostream>
#include <iterator>
#include <iostream>
#include <algorithm>
#include <array>
void checkIfIndexIsLargestInItsAdjacency(std::vector<std::vector<int>> arr, size_t targetRow, size_t targetColumn){
int targetNumber = arr[targetRow][targetColumn];
int numberToTheLeft = targetColumn > 0 ? arr[targetRow][targetColumn-1] : 0;
int numberToTheRight = targetColumn + 1 < arr[targetRow].size() ? arr[targetRow][targetColumn+1] : 0;
int numberToTheUp = targetRow > 0 ? arr[targetRow-1][targetColumn] : 0;
int numberToTheDown = targetRow + 1 < arr.size() ? arr[targetRow+1][targetColumn] : 0;
std::cout<< "targetNumber: " << targetNumber << std::endl;
std::cout<< "Number to the left: " << numberToTheLeft << std::endl;
std::cout<< "Number to the right: " << numberToTheRight << std::endl;
std::cout<< "Number to the up: " << numberToTheUp << std::endl;
std::cout<< "Number to the down: " << numberToTheDown << std::endl;
std::array<int, 4> adjacentNumbers = {numberToTheLeft, numberToTheRight, numberToTheUp, numberToTheDown};
int maxAdjacentNum = *std::max_element(adjacentNumbers.begin(), adjacentNumbers.end());
std::cout << "Target number is " << (maxAdjacentNum >= targetNumber? "smaller" : "bigger") << " than adjacent numbers" << std::endl;
}
int main(){
std::vector<std::vector<int>> arr;
arr.push_back({0, 1, 2 });
arr.push_back({4, 5, 6 });
arr.push_back({8, 9, 10});
checkIfIndexIsLargestInItsAdjacency(arr, 1, 1);
checkIfIndexIsLargestInItsAdjacency(arr, 2, 2);
}
示例输出:
targetNumber: 5
Number to the left: 4
Number to the right: 6
Number to the up: 1
Number to the down: 9
Target number is smaller than adjacent numbers
targetNumber: 10
Number to the left: 9
Number to the right: 0
Number to the up: 6
Number to the down: 0
Target number is bigger than adjacent numbers