A 回答 (5件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
> 実体をコピーするにはどうしたらよいですか?
これを行うとなると、結局、文字列を保持するクラス(or 配列)を作ることになるので、アクセス速度という点では std::string を避ける意味合いは薄れると思います。
そして、文字定数として参照するだけなら実体をコピーする必要もなさそうです。
そもそも、std::string::c_str() は通常、先頭アドレスのポインタを返す程度の仕事を、inline で行っているだけなので(手元のg++等を見ても)、これを使ったからといってアクセスが劇的に遅くなるようなことはないですが…。
> このようになった方が高速にアクセスできると思うので、
> このようなデータで配列に入れる方法も知りたいです。
根拠はなんですか?多分、幻想(or 勘違い)だと思いますが。
配列に先頭アドレスを保持している時点で、アドレスの増分が一定でもアクセス速度は向上しません。むしろ、キャッシュのヒットを考えると、一般論では近いアドレスにロードされる方が高速になる可能性が高い(または誤差の範囲)ように思われます。
# 環境次第だと思いますが、後者が早い理由を思いつきません。
No.1
- 回答日時:
> vector<string>を使用せずpush_back("aaa")が使えるようなvector配列を用意することはできませんか?
単にpush_back("aaa")が使えるようにするだけであれば、std::vector<const char*>で十分ですが、文字列の実体をコピーするのなら、別の方法が必要です。
[]でなく*でできるのは気がつきませんでした。
char *str = "bbb";でstrcpy(str, "aaa");はできませんからね。
実体をコピーするにはどうしたらよいですか?
std::vector<const char*>でpush_back("aaa")ができましたが、"aaa"や"bbb"の文字列の先頭アドレスを配列にして高速でアクセスしたいと考えています。
vec[0]は"aaa"の先頭アドレスで値は100000
vec[1]の"bbb"の先頭アドレスで値は100200
vec[2]の"ccc"の先頭アドレスで値は100030
こういうものでなく、
vec[0]は"aaa"の先頭アドレスで値は100000
vec[1]の"bbb"の先頭アドレスで値は100100
vec[2]の"ccc"の先頭アドレスで値は100200
このようになった方が高速にアクセスできると思うので、このようなデータで配列に入れる方法も知りたいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてください。 2 2022/04/22 18:48
- C言語・C++・C# このプログラミング誰か教えてください 9 2022/04/22 18:50
- ブルーレイ・プレーヤー・レコーダー BD-REについて教えてください。 3 2022/11/10 23:28
- フリーソフト Vector フリーソフト 卓上カレンダー Windows10での作動は? 2 2022/06/11 19:03
- ガスコンロ・IHクッキングヒーター・給湯器 コンテンツブロッカーについて 2 2023/05/17 09:43
- その他(言語学・言語) 「ベクトル」ってなんか抵抗ありませんか?「ヴェクトル」のほうがよくありませんか? 9 2023/01/01 10:50
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 配列の長さの上限
-
C# 配列の変数宣言について。
-
配列を使わずに、変数名を動的...
-
unsigned char配列への入力の仕方
-
C言語で特定列だけを抽出して配...
-
先頭アドレスとは何ですか?
-
ExcelVBAで質問です。離れた二...
-
VB.NET 構造体の配列の検索機能...
-
配列で格納したものをmsgboxで...
-
C言語の配列番号が"0"から始ま...
-
配列の参照渡しで型が一致しま...
-
メモリの初期値
-
VBでC言語のポインタみたい...
-
C# Listを使わずに2次元配列の...
-
C++ vectorに配列をプッシュしたい
-
intel fortranコンパイラについて
-
銀行ATMの数字キーの配列
-
配列をEraseしてもメモリが開放...
-
C言語で巨大配列を作るにはどう...
-
なぜ配列は0から始まるのです...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
先頭アドレスとは何ですか?
-
配列で格納したものをmsgboxで...
-
C# Listを使わずに2次元配列の...
-
C# 配列の変数宣言について。
-
テキストファイルから文字列を...
-
配列の参照渡しで型が一致しま...
-
ExcelVBAで質問です。離れた二...
-
unsigned char配列への入力の仕方
-
VBで構造体の配列を関数に渡す...
-
C++ vectorに配列をプッシュしたい
-
C言語で特定列だけを抽出して配...
-
Excel、VBAのユーザーフォーム...
-
複数の選択範囲の行番号を個別...
-
配列をEraseしてもメモリが開放...
-
配列を含む構造体の初期値について
-
【速いブラインドタッチ】手を...
-
C言語 配列の再初期化
-
Redimした動的配列はEraseする...
おすすめ情報