c++でポインタに入っている配列の先頭アドレスをvector に参照渡ししたいのですが、どなたか教えてください。(意味不明な所がありましたらコメントで返信します)
(追記)かいていたコードを下記に記載してました。これでは間違いでしょうか。
c++ コード char* data = ある参照したい配列の先頭アドレス vector <char> received; &received[0]=data;
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
こんにちは。
配列の先頭アドレスをvector に参照渡ししたい
一般にアドレス渡し=参照渡しですので普通にポインタを渡せば良いです。
もし、std::vector<>で参照を保持したいと言う意味でしたら、それは文法上できません。
また、配列を指すポインタを定義することはできますが、直ぐに先頭要素へのポインタに成り下がってしまいます(配列の要素数の情報が抜け落ちる)ので、ハンドリングは困難です。
従って、配列の先頭要素へのポインタをstd::vector<>で保持することをお勧めします。
例えばint型の配列なら、下記となります。
C++
1int a[10]={}; 2int b[20]={}; 3 4std::vector<int*> foo; 5foo.push_back(a); 6foo.push_back(b); 7// foo[0]は、&(a[0])と同じものです。 8// foo[1]は、&(b[0])と同じものです。
投稿2016/08/15 16:19
総合スコア23272
0
ベストアンサー
(質問文が意味不明ですが勝手に意図を推測します。)
c++
1#include <cassert> 2#include <vector> 3 4int main() 5{ 6 int a[3] = {1, 2, 3}; 7 int* p = &a[0]; 8 std::vector<std::reference_wrapper<int*>> v = {p}; 9 10 assert(v[0].get() == &a[0]); // refer same object 11}
他回答へのコメントより引用:
配列の先頭アドレスがわかったら、空のVectorに値を丸ごと投げる事はできないのかなと思ってた
もしかして下記のような処理をしたかったのでしょうか?ただし、ここでは参照ではなく、配列の値をvectorにコピーしています。
#include <cassert> #include <vector> int main() { char a[] = "ABC"; char *p = &a[0]; std::vector<char> v(p, p+3); assert(v[0]=='A' && v[1]=='B' && v[2]=='C'); }
投稿2016/08/15 16:00
編集2016/08/16 03:49総合スコア6191
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/16 04:12
2016/08/16 06:28 編集
2016/08/16 08:29
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/16 03:05
2016/08/16 04:08 編集
2016/08/16 04:15