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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
sigs

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

#1

投稿記事 by sigs » 12年前

変数として、
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ループで値をコピーして、それを渡してもいいのですが、
もっと何か簡単な方法があれば幸いです。

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

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

#2

投稿記事 by h2so5 » 12年前

data()で const int* を取得できます。

コード:

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

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

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

#3

投稿記事 by ISLe » 12年前

ふつうに
func(&vint[0]);
とわたしてダメですか?

アバター
雨ガエル
記事: 34
登録日時: 13年前
住所: 新潟
連絡を取る:

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

#4

投稿記事 by 雨ガエル » 12年前

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

sigs

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

#5

投稿記事 by sigs » 12年前

ありがとうございます!助かりました。

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

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

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

閉鎖

“C言語何でも質問掲示板” へ戻る