簡體   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