繁体   English   中英

如何取消引用多维向量指针?

[英]How do I dereference multidimensional vector pointer?

我一直试图获取 A[i][j] 指向的值。 double a = A[i][j]; . 我该如何正确地做到这一点? 有人可以解释一下吗?

// g++ jacobi.cpp -O0 -o jacobi && ./jacobi
#include <iostream>
#include <iomanip>
#include <vector>
#include <climits>

using namespace std;

void print_matrix(vector<vector<double>>& m) {
  for (int i = 0; i < m.size(); i++) {
    for (int j = 0; j < m[0].size(); j++) {
      cout << setw(5) << fixed << setprecision(2) << m[i][j] << " ";
    }
    cout << endl;
  }
  cout << "==================================" << endl;
}

// calculate average temperature based on average of adjacent cells
double avg_temp_at(vector<vector<double>>& matrix, int i, int j) {
  return (
    matrix[i][j] +
    (j-1 >= 0 ? matrix[i][j-1] : 0) + 
    (i-1 >= 0 ? matrix[i-1][j] : 0) +
    (j+1 < matrix[0].size() ? matrix[i][j+1] : 0) +
    (i+1 < matrix.size() ? matrix[i+1][j] : 0)
  ) / 5;
}

// sequential Jacobi algorithm
vector<vector<double>> jacobi_relaxation(vector<vector<double>>& matrix, int& threshold) {
  vector<vector<double>> B (matrix.size(), vector<double>(matrix[0].size(), 0));
  vector<vector<double>>* A = &matrix;
  double max_delta = INT_MAX;

  while (max_delta > threshold) {
    max_delta = 0;

    for (int i = 0; i < matrix.size(); i++) {
      for (int j = 0; j < matrix[0].size(); j++) {
        B[i][j] = avg_temp_at(*A, i, j);

        double a = A[i][j];
        double delta = abs(B[i][j] - a);
        max_delta = max(max_delta, delta);
      }
    }
    print_matrix(B);
    A = &B;
  }

  return *A;
}

int main() {
  int threshold = 1;
  int n = 6;
  vector<vector<double>> matrix (n, vector<double>(n, 0));
  matrix[1][2] = 100;
  matrix[2][2] = 100;
  matrix[3][2] = 100;

  print_matrix(matrix);

  vector<vector<double>> x = jacobi_relaxation(matrix, threshold);
}

我试过你的代码,它在这一行给了我错误:

double a = A[i][j];

将该行更改为:

double a = (*A)[i][j];

它会起作用。

解释:这与第B[i][j] = avg_temp_at(*A, i, j);中的技巧基本相同。 . A是一个指针,它指向一个向量。 要访问指针“真实数据”,您必须使用*

在这里您可以找到有关指针的更多信息。

希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM