basic_stringのアロケーション – プログラミング – Home

basic_stringのアロケーショ...
 
通知
すべてクリア

[解決済] basic_stringのアロケーション


ガラ
 ガラ
(@ガラ)
ゲスト
結合: 20年前
投稿: 201
Topic starter  

OS XP、VC++6.0
自前のリードメソッドをつくってみたのですが、
basic_stringで定義したバッファをアロケートしてから、CFile::Read()
にわたしたいのですが、assign()しか考え付きません。
値を入れている分、無駄なことしているように思えるのですが、
みなさんは、どうされていますでしょうか?

void CSGARA::Read(LPCTSTR aFileName)
{
CFile wFile(aFileName,CFile::modeRead | CFile::typeBinary) ;
basic_string<UCHAR> wReadBuffer ;

wReadBuffer.assign(0x00,wFile.GetLength()) ;

wFile.Read(&wReadBuffer[0],wFile.GetLength()) ;
wFile.Close( ) ;
}


引用未解決
トピックタグ
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

まずはその assign の使い方合ってるかい?

assign は置換を行うわけで、そういう意味では無駄
resize, reserve っつメンバが存在するけどそっちを使うべきだろう
resize と reserve のどっちが適切かは basic_string の使い方次第

assign にせよ resize にせよ「入るべき値を指定しない」手段は無いわけで
そういう意味ではどっちも無駄だけどさ
reserve は、使い方によっては呼んでも意味が無いかもしれない

バッファ用途には vector のほうが多用されているような気がするが・・・


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

> 値を入れている分、無駄なことしているように思えるのですが、
> ファイルIOのスピードに比べりゃゴミにもならんので気にしない。

僕ならコンストラクタでサイズ確保。
CFile wFile(aFileName,CFile::modeRead | CFile::typeBinary) ;
basic_string<UCHAR> wReadBuffer(0x00,wFile.GetLength()) ;


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

その basic_string コンストラクタの使い方間違ってねぇ?
basic_string::basic_string(size_type n, charT c, const allocator& a=A())
だと思うが


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

いたたたた、逆です。すんません。


返信引用
ガラ
 ガラ
(@ガラ)
ゲスト
結合: 20年前
投稿: 201
Topic starter  

tetrapodさん、επιστημηさん、いつもありがとうございます。
あとで、気に入らないと、何度も直すほうなので、
こうゆう、アドバイスは、非常にたすかります。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました