2016-11-24 6 views
-1

(私はCのバックグラウンドで、C++の新しいSTLとなります)
渡されるベクトルのC++配列を記述していますベクトルの)を関数で処理し、その中で処理されます。 [C中】この場合
私は私のカスタムデータ型へのポインタを渡されていた
そうしようとしているときに、コンパイル時にエラーを与えている私のコード(フードの下の値で呼んでいます。):C++の関数を使用してベクトルの配列を渡して変更する

#include <cstdio> 
#include <vector> 

using namespace std; 

/* 
the problem is I can't get the syntax. vector<type> &var is 
a reference to a single dimension array of vectors. 
*/ 

void pass_arrayOf_vect(vector<int> &array, int lmt); 

int main() { 

    int lmt = 10; 

    vector<int> lst[lmt]; 

    pass_arrayOf_vect(lst, lmt); 

    return 0; 
} 

/* 
and the traditional ambiguity of whether using "." or "->" for 
accessing or modifying indexes and their members. 
*/ 

void pass_arrayOf_vect(vector<int> &lst, int lmt) { 


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

      lst[i].push_back(i*i); 

     } 


     for (int i = 0; i < lmt; i++) { 
     printf("array[%d]: ", i); 
     for (int j = 0; j < lst[i].size(); j++) { 

      printf("%d ",lst[i][j]); 
     } 
     printf("\n"); 
     } 

    printf("\n"); 

    return; 
} 
+0

ベクトル配列を使用するには、「ベクトル」を書き込みます。 –

+0

'vector lst [lmt];注意' lmt'はコンパイル時定数ではないので、これは可変長配列と呼ばれています。これらは標準C++の一部ではなく、ほんのわずかのコンパイラでサポートされています。あなたがGCCであなたのプログラムを構築し、Visual Studioを使って誰かにプログラムを提出すれば、人生は面倒です。 – user4581301

+0

あなたのCからは、C++標準では、ここでのように可変長配列(VLA)がサポートされていないことをすぐに知っているはずです(さらに、拡張でサポートする悪質なコンパイラでさえ、 -POD型の要素ベース)、私はそれらの明確なステアリングから始めたいと思います。第2に、このサイトで報告されたコンパイラのエラーに関する質問がある場合(あなたが言ったように、「コンパイル時にエラーを出す」**常に**あなたの投稿にエラー**を入れてください) – WhozCraig

答えて

2

main関数では、lst変数はベクトルの配列です。これをpass_arrayOf_vect関数に渡すと、最初の要素へのポインタが渡されます。

I.e.あなたは

pass_arrayOf_vect(lst, lmt); 

を行うとき、それはあなたがニーズを呼び出す関数は、最初の引数としてベクトル(ない参照)にポインタを受け入れるために、実際に

pass_arrayOf_vect(&lst[0], lmt); 

を行うのと同じです。


もっと良い解決策は、代わりにベクトルの。または、std::arrayをサポートしていない古いコンパイラを使用している場合や、実行時に構成可能な量が必要な場合(その場合はプレーンなCスタイルの配列を使用できません)、ベクトルのベクトルを使用してください。

+0

私が知りたいのはまさにそのことです。 – ph03n1x

+0

@ ph03n1xベクトルを変更するところは、プログラムに依存し、何をやろうとしているのかによって異なります。機能は2つでは可読性が向上することを除けば、重要ではない簡単なプログラムについては –

+0

現在私は主にC++をプログラミング問題の解決に使用していますが、後でLinuxカーネル/システムプログラミングに使用します(必要な場合)。 – ph03n1x

関連する問題