2014-04-03 47 views
0

我創建了一個程序,它將生成一個帶有隨機數的低三角矩陣。 現在我需要以某種方式將我的結果轉換爲矢量,然後使用線性搜索算法。用三角矩陣將數組轉換爲矢量並執行線性搜索

這是我的代碼的一部分。

void lower_half(int arr[8][8], int r) 
{ 
    int i, j; 
    cout << "\n"; 
    for (i = 0; i<r; i++) 
    { 
     for (j = 0; j <= i; j++) 
     { 
      cout << arr[i][j] << " "; 

     } 
     cout << "\n"; 

    } 
} 
int main() 
{ 

    int arr[8][8], i, j; 
    int r = 8; 




    for (int i = 0; i < r; ++i) 
    { 

     { 
      for (int j = 0; j < r; ++j) 
      arr[i][j] = (rand() % 44) + -30; 

     } 
    } 

    lower_half(arr, r); 
    system("pause"); 


    return 0; 

} 
+0

請提供矩陣的例子,你想在矢量中得到什麼? – 4pie0

回答

0
vector<int> to_vec(int arr[8][8], int r) 
{ 
    int i, j; 
    vector<int> vec; 
    for (i = 0; i<r; i++) 
    { 
     for (j = 0; j <= i; j++) 
     { 
      vec.push_back(arr[i][j]); 
     } 
    } 
    return vec; 
} 

int index_of(vector<int> vec, int n) 
{ 
    for (i = 0; i<vec.size(); i++) 
     if (vec[i]==n) 
      return i; 
    return -1; 
} 
+0

謝謝!你能解釋我的第二部分「index_of」嗎? –

+0

當然你會接受嗎? – hasan83

+0

你覺得哪部分需要說明? – hasan83

0

你真的需要使用int ARR [8] [8]在首位? 2D [8] [8]陣列與1D [8 * 8]陣列相同。正因爲如此,你不妨首先使用矢量:

int find(std::vector<int>& arr, int value) 
{ 
    auto it = std::find(arr.begin(), arr.end(), value); 
    return it == arr.end() ? -1 : &*it - &*arr.begin(); 
} 


int main() 
{ 
    std::vector<int> arr(64, 0); // new vector, 64 elements, initialized to 0 

    for (int& a : arr) // populate array with random numbers 
     a = (rand() % 44) - 30; 

    int index = find(arr, 12); 

    return 0; 
} 

迭代器語法是非常醜陋的,但在其他的代碼通過創建一個64元(8 * 8)陣列和隨機填充它數字 - 通知for (int& a : arr)語法,其中int& a是對arr中元素的引用。

如果您不能使用一個int [8] [8],那麼你可以使用此解決辦法脫身:如果您遇到麻煩後索引陣列

int matrix[8][8]; 
int* arrayPtr = (int*)matrix; // like I said, int[8][8] is the same as int[64] 
           // so treat it as an array pointer int* 

std::vector<int> arr(arrayPtr, arrayPtr + 64); // treat arrayPtr as int[64] 

,不煩惱:

for (int i = 0; i < 8; ++i) 
    for (int j = 0; j < 8; ++j) 
     printf("[%d][%d] = %d\n", i, j, arr[i*8 + j]); 
+0

嗨!感謝您的回覆。我不知道我的情況是什麼更好。看看整個任務。這是爲pascal,但我用C++編寫1.創建這些特殊數組之一8x8 a。對角矩陣 b。低三角形矩陣 c。高三角形矩陣 d。對稱矩陣 2.用範圍[-30..45]中的隨機整數填充它; 3.顯示填充陣列; 4.將數組轉換爲向量; 5.使用線性搜索算法在矢量中搜索用戶指定的元素; 6.使用以下算法之一排序向量: a。泡沫; b。插入; c。選擇; 7.顯示排序的向量。 –

+0

這是多餘的學校任務嗎? std :: vector在這種情況下工作正常,並且易於管理。唯一的區別是索引而不是[i] [j],您使用[i * 8 + j]。 –

+0

不是真的,這是爲了pascal,但我想用C++來完成。我創建它更具挑戰性。我已經實現了這些排序算法,但不知道如何進行線性搜索,並將它們結合在一起。需要睡覺,但我不能,直到我沒有完成這一點。 :) –