2016-05-27 10 views
0

私は複素数の多次元配列のベクトルを得ました。 ベクターは、このベクターは、点のx-y座標及び他の情報で満たされ、そしてソートされた後に、このコードベクトルpush_back doubleの配列

std::vector<std::array<double, 3>> matrix; 

で作成されています。これは、私が与えられた2次元モデルの外形になるために必要です。モデルの外形を閉じるには、最初の点の情報をベクトルの最後にコピーする必要があります。 私はベクトルのベクトルを持っていれば、このようなコードを使うことができます。

matrix.push_back(std::vector<double>(3, 0)); 
int p = matrix.size()-1;   
matrix[p][0]=matrix[0][0]; 
matrix[p][1]=matrix[0][1]; 
matrix[p][2]=matrix[0][2]; 

私は配列のベクトルを使用しているので、これは間違っているようです。私はこのコードを少し修正して使用しようとしました。

matrix.push_back(std::array<double, 3>); 

しかし、ここで私は、エラーメッセージが表示されます。

class: std::array Error: type name is not allowed

私はVisualStudioを2012年を使用している誰かが私が間違ってやっている、私に言うことはできますか?

+0

'std :: vector 'オブジェクトを 'std :: array 'のベクトルに挿入することはできません。 'matrix.push_back({1、2、3});' –

+0

ポリゴンの最後に最初のポイントを追加する必要はありません。これはむしろエラーを起こしやすい。最後のポイントの後に最初のポイントまで余分なラインが必要であることがわかっているので、閉じたポリゴンフラグを使用する方がよいでしょう。 – stefaanv

答えて

3

std::arrayがコピー可能なので、あなたが最後に最初の項目をコピーしたい場合は、単に言う:あなたはの名前を渡しているので、あなたがエラーを取得している理由については

matrix.push_back(matrix[0]); 

を、それはですタイプではなく、オブジェクトではなくpush_backです。

+0

ありがとうございました。 – user3794592

+0

もう一度お悔やみして申し訳ありません。あなたのコードでプログラムをコンパイルすることはできますが、ソフトウェアを起動すると、「式:ベクトル添え字が範囲外です」というメッセージが表示されます。コードの行にコメントを付けるとすぐにすべてが動作します。 – user3794592

+0

@ user3794592 - コードを追加して、コピーしようとする前に配列に実際に何かがあることを確認する必要があります。 – Sean

0

matrix.push_back(std::array<double, 3>);は無効な構文です。オブジェクトの代わりに角括弧内に型名があります。

例として、matrix.push_back(std::array<double, 3>{1.0, 2.0, 3.0});が有効です。

関連する問題