[解決済み] 生データへのstd::vectorポインタを取得する方法は?
質問
を使おうとしています。
std::vector
として
char
の配列になります。
私の関数はvoidポインタを取り込みます。
void process_data(const void *data);
以前は単にこのコードを使っていただけでした。
char something[] = "my data here";
process_data(something);
これは期待通りに動作しました。
しかし、今私は、動的な
std::vector
というわけで、代わりにこんなコードを試してみました。
vector<char> something;
*cut*
process_data(something);
問題は、どのようにcharベクトルを関数に渡せば、ベクトルの生データ(floatなど、どのようなフォーマットであっても)にアクセスできるのか、ということです。
こんなことをやってみました。
process_data(&something);
そして、これ。
process_data(&something.begin());
しかし、ちんぷんかんぷんなデータへのポインタが返され、後者は警告を発した。
warning C4238: nonstandard extension used : class rvalue used as lvalue
.
解決方法は?
&something
のアドレスが表示されます。
std::vector
オブジェクトのアドレスであり、それが保持するデータのアドレスではありません。
&something.begin()
が返すイテレータのアドレスが得られます。
begin()
(コンパイラが警告しているように、これは技術的に許可されていませんので
something.begin()
はrvalue式なので、そのアドレスは取得できない)。
コンテナの中に少なくとも1つの要素があると仮定して、コンテナの初期要素のアドレスを取得する必要があります。
-
&something[0]
または&something.front()
(インデックス0にある要素のアドレス)、または -
&*something.begin()
(で返されるイテレータが指す要素のアドレス)。begin()
).
C++11では、新しいメンバ関数が
std::vector
:
data()
. このメンバ関数は、コンテナ内の初期要素のアドレスを返します。
&something.front()
. このメンバ関数の利点は、コンテナが空でも呼び出しても問題ないことです。
関連
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み】C++の余分な資格エラー
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] std::vector にある項目が存在するかどうかを調べるには?
-
[解決済み] std::vectorをハードコードされた要素で初期化する最も簡単な方法は何ですか?
-
[解決済み] std::vector<> からインデックスで要素を消すにはどうしたらいいですか?
-
[解決済み] std::vector に対する反復処理: 符号なしインデックス変数と符号ありインデックス変数の比較
-
[解決済み】汝、std::vector を継承してはならない。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み】 while(cin) と while(cin >> num) の違いは何ですか?)