2017-02-24 67 views
-2

當我嘗試在C++中填充2d向量時,我總是收到超出範圍的錯誤。我哪裏錯了?下面發佈是我相信會產生相同問題的問題的縮短版本。錯誤2d向量C++

#include <vector> 
#include <stdio.h> 
#include <cstdlib> 
#include <iostream> 

typedef std::vector<double> NA; 
typedef std::vector<NA> NB; 

NA NI; 
NB NO; 

long i=0,j=0; 
int N = 10; 
double R; 

int main(){ 

    for(i=0;i!=N;i++){ 

     NO.push_back(NI); 
     for(j=i+1;j<N;j++){ 

      R = rand(); 


      NO.at(i).push_back(j); 
      NO.at(i).at(j) = R; 
     } 
    } 
} 
+3

代碼中沒有2D向量。此外,當您收到「錯誤」時,始終有用於發佈實際的錯誤消息。 (P.S:NI,NO,i,j,N,R不是很好的變量名,請考慮使用描述性變量名) – Borgleader

+0

這裏:'NO.at(i).at(j)= R;'不應該編譯?事實上它不是:http://ideone.com/ukPags –

回答

2
  1. 你的類型定義是錯誤的。您的意思是:

    typedef std::vector<double> NA; 
    typedef std::vector<NA> NB; 
    //     ^^ 
    
  2. 您的循環索引錯誤。你的意思是j++

  3. 內部索引必須抵消:at(j - i - 1)

  4. 外部容器更新NO.push_back(NI);需要移動到外部循環中。

+1

我不明白超出範圍的錯誤甚至出現了。提供的代碼甚至不能編譯? http://ideone.com/ukPags –

+0

[完整演示](http://ideone.com/8kBb31) –

+0

對不起,我寫我的手機,因爲我沒有互聯網,讓我糾正這些問題。道歉。 – RedPen