2017-02-24 17 views
-2

2次元ベクトルをC++で生成しようとすると、範囲外のエラーが発生し続けます。どこが間違っていますか?私は同じ問題を生成すると私は思う私の問題の短縮バージョンです。あなたのtypedefが間違っている2次元ベクトル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

コードには2次元ベクトルはありません。また、「エラー」が発生した場合は、実際のエラーメッセージを投稿するのに便利です。 (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