ページ 11

vector<int>を引数として、intの静的配列として私たい

Posted: 2013年4月23日(火) 23:13
by sigs
変数として、
vector<int> vint(10) ;

と定義しておいて、何かの値で初期化し、
例えば、次のような
int func(int* cint) { return 0; }

int func(int cint[10]) { return 0; }

と定義されている関数に渡したいのですが、
何か簡潔な方法はありませんか?

単純にわたそうとすると、
vector<int>型から、const int* 型に変換できません、な感じに言われてしまいます。

例えば、新たに
int cint* = new int[vint.size()]
と宣言して、その中にforループで値をコピーして、それを渡してもいいのですが、
もっと何か簡単な方法があれば幸いです。

Re: vector<int>を引数として、intの静的配列として私たい

Posted: 2013年4月23日(火) 23:40
by h2so5
data()で const int* を取得できます。

コード:

vector<int> vint(10) ;
func(vint.data());

Re: vector<int>を引数として、intの静的配列として私たい

Posted: 2013年4月23日(火) 23:44
by ISLe
ふつうに
func(&vint[0]);
とわたしてダメですか?

Re: vector<int>を引数として、intの静的配列として私たい

Posted: 2013年4月23日(火) 23:46
by 雨ガエル
vectorで確保した領域は配列のようにメモリ上に連続して並んでいるので、
配列を要求する関数に渡すときは、下のようにデータの先頭のアドレスを渡します。

コード:

#include <vector>
int func(int* cint) { return 0; }
int main(void)
{
     vector<int> vint(10);
     func(&vint[0]);  //先頭データのアドレスを渡す
     return 0;
}
参考URL http://www.geocities.jp/ky_webid/cpp/library/002.html

Re: vector<int>を引数として、intの静的配列として私たい

Posted: 2013年4月24日(水) 00:31
by sigs
ありがとうございます!助かりました。

.data()って、単純なアドレスだったのですね。
vint.data()[1] という書き方が出来ることにびっくりです。

&vint[0]
の発想もなく、&vintしか思いつきませんでしたね。

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