C++ 如何求二维阵列中两点的差 #包括 使用名称空间std; int main(int argc,字符**argv) { INTC; 整数距离=0; int最大距离=0; 整数和=0; cin>>c; 整数点[c][2]; 对于(int i=0;i点[i][j]; } } cout

C++ 如何求二维阵列中两点的差 #包括 使用名称空间std; int main(int argc,字符**argv) { INTC; 整数距离=0; int最大距离=0; 整数和=0; cin>>c; 整数点[c][2]; 对于(int i=0;i点[i][j]; } } cout,c++,multidimensional-array,difference,C++,Multidimensional Array,Difference,如果引入点类型,这将更加清晰: #include <iostream> using namespace std; int main (int argc, char ** argv) { int c; int distance=0; int largestdistance=0; int sum=0; cin >> c; int point[c][2]; for (int i=0; i<c; i++){

如果引入点类型,这将更加清晰:

#include <iostream>
using namespace std;
int main (int argc, char ** argv)
{
    int c;
    int distance=0;
    int largestdistance=0;
    int sum=0;
    cin >> c;
    int point[c][2];
    for (int i=0; i<c; i++){
        for (int j=0; j<2; j++){
            cin >> point[i][j];
        }
    }
    cout << point[2][0] << " ";
    for (int i=0; i<c; i++){
        for (int j=0; j<2; j++){
            sum += abs(point[0][0]-point[1][0])+abs(point[0][1]-point[1][1]);
        }
        if (sum > largestdistance){
            largestdistance=sum;
        }
        cout << '\n';
        return 0;
    }
}
有了它,循环就容易多了:

struct Point {
    int x, y;
};

int manhattan_dist(const Point& p, const Point& q) {
    return abs(p.x - q.x) + abs(p.y - q.y);
}
或者,优选地:

Point* points = new Point[c];
std::向量点(c);

那么我必须动态分配阵列才能使程序工作,还是可选@Barry@SeanChen您的编译器可能允许您这样做,但最好不要依赖非C++11特性(VLA仅适用于C)只是动态分配内存。嗯,但是我使用的是一个真正的旧版本的C++,而不是C++ 11,所以我可能无法做到这一点。我现在改变了你告诉我的所有内容,我更新了我的代码,让它里面有你的东西。但是,由于某种原因,我在CIN >点[i][j]上有一个错误,这个错误与'Trace[] ]不匹配。(&points)->std::vector::operator[][with _Tp=Point,_Alloc=std::allocator]((unsigned int)i))[j]'。您知道如何解决这个问题吗@Barry@SeanChen因为
不再是2D数组,而是
的1D数组。您必须分别输入
x
y
Point* points = new Point[c];
std::vector<Point> points(c);