質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

1969閲覧

c++ std::vector<構造体>の中の配列に値を格納する方法を教えてください

puroguraman

総合スコア20

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/08/12 13:49

struct BASE_VERTEX {
float V_0[5], V_1[5], V_2[5], V_3[5];

float N_0[5], N_1[5], N_2[5], N_3[5];

};
exterun std::vector<std::vector<BASE_VERTEX>> vertex_data;
std::vector<std::vector<BASE_VERTEX>> buff;

//あるサブルーチンの引数V_0~V_3をvertex_dataに入れたい。
void vertex_rec(int regi_num, int dim_num, float V_0[5], float V_1[5], float V_2[5], float V_3[5]) {

//?? buff[0].V_0={V_0}; vertex_data[regi_num].emplace_back(buff);

(略)
}

エラーが出て、できません。構造体みたいにメンバーに直に代入ができません。
c++超初心者です。どなたか教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

puroguraman

2020/08/12 14:24

それはemplace_backの使い方とそのエラーについての質問です。この問題とは別の問題です。
episteme

2020/08/12 14:28

では「エラーが出て、できません。」を説明していただけますか? どこでどんなエラーが出ますか?
guest

回答2

0

//??

buff[0].V_0={V_0};

問題個所はここ↑ですか?

std::copy_n(V_0, 5, buff[0].V_0); でコピーできませんか?
※ #include <algorithm> をお忘れなく

投稿2020/08/12 14:38

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

puroguraman

2020/08/12 14:59

パソコンシャットダウンしてて、そこです。エラーは。メンバーにv_0がないと言われました。構造体の感覚で使っていて、調べまくったのですがわからずです。前の質問とは異なる内容です。重複した質問ではないです
episteme

2020/08/12 15:41

> メンバーにv_0がないと言われました。 v_0 はありませんね、V_0 ならともかく。
SHOMI

2020/08/13 02:30 編集

std::vector<std::vector<BASE_VERTEX>> buff; なのでbuff[0]にV_0はありませんね。 buff[0][0].V_0? もしくは質問タイトルや vertex_data[regi_num].emplace_back(buff); としようとしていることから std::vector<BASE_VERTEX> buff; vertex_data[regi_num].emplace_back(buff[0]); の誤りなのかもしれませんが…
episteme

2020/08/13 00:36

あ、vectorのvectorか...
guest

0

ベストアンサー

配列は値としてやり取りすることは出来ません。

cpp

1// こういうのはダメ 2int a[5] = {1, 2, 3, 4, 5}; 3int b[5] = a;

for ループを回してひとつずつコピーするか、 std::copy といった関数を使う必要があります。

あるいは配列ではなく std::array で定義しておくというのもひとつの手段です。

そしてこれは C/C++ のわかり難いところなんですが、配列形式で書いた仮引数はポインタに調整されます。 ですから、この場合の vertex_rec の仮引数 V_0 V_1 V_2 V_3 の型は float* と書いたのと同じということになります。

投稿2020/08/12 14:05

SaitoAtsushi

総合スコア5466

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問