トップページ⇒tech
1001コメント253KB

【C++】STL(Standard Template Library)相談室

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
関連スレなどは>>2以降で
0703デフォルトの名無しさんNGNG
>>702
setの仕様がよく分かってないんだけど、
挿入できたかどうか、っていうのはユニークな値かどうかってこと?
0704デフォルトの名無しさんNGNG
set ではキーの重複は認められないので挿入出来ないときがあるっしょ。
0705デフォルトの名無しさんNGNG
大阪(西梅田)、新宿(JR駅前)のそれぞれ一等地に
拠点を構えるソフトウェア開発会社
グリーンシステムを応援するHPです。
http://www.geocities.jp/grs_hp/

こちらのスレの住人のかたがたのようなレベルの高いかたに
ピッタリだと思いますので、是非一度ご覧下さい。
0706デフォルトの名無しさんNGNG
>>704
そうだったんですか。
ありがとうです。謎は全て解けました。
0707デフォルトの名無しさんNGNG
hash_mapを使用していますが、件数が多くなるにつれて検索速度が落ちます。
検索を早くする方法はありませんか?
キーは文字列です。

0708デフォルトの名無しさんNGNG
> 件数が多くなるにつれて検索速度が落ちます。

件数がいくら多くなっても検索速度が落ちないコンテナなんてないです。
0709デフォルトの名無しさんNGNG
量子コンテナ
0710デフォルトの名無しさんNGNG
強いていうならハッシュ関数が悪いと衝突が多くなって急速に性能が劣化する
0711デフォルトの名無しさんNGNG
>>710
ハッシュ関数が悪くなくてもロード率が上がれば衝突が多くなる。
0712デフォルトの名無しさんNGNG
衝突する率を下げるにはどうすれば?
0713デフォルトの名無しさんNGNG
テーブルを大きくする。
ハッシュ関数の性能を上げる。
0714デフォルトの名無しさんNGNG
gperfなら衝突しないよ
0715デフォルトの名無しさんNGNG
ハッシュと赤黒併用すれば?
0716デフォルトの名無しさんNGNG
VC++6で std::list<std::string> を使おうとしたら、次のようなwarningが出ました。

c:\program files\microsoft visual studio\vc98\include\xlocale(467) : warning C4786:
'std::reverse_bidirectional_iterator<std::list<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,
std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::iterator,
std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,
std::allocator<char> > &,std::basic_string<char,std::char_traits<char>,std::allocator
<char> > *,int>' : 識別子が '255' 文字に切り捨てられました (debug 情報内)。

これはどういう意味なのでしょうか。
0717デフォルトの名無しさんNGNG
VC6 は窓から投げ捨てろっていう意味
0718デフォルトの名無しさんNGNG
>>716
散々ガイシュツ。もう答える気力もない。
0719デフォルトの名無しさんNGNG
>>716
ヘルプ読めって、よく周りの人たちから言われない?
0720デフォルトの名無しさんNGNG
>>717->>719
知らないなら、いちいち糞レスしなくていいよ (プ
0721716NGNG
ググったら普通に解決したよ。
ここにいる連中はgoogle以下のクズばかりだな。

C4786は無視してよい。出さないためには
#pragma warning(disable:4786)
を書く。
0722デフォルトの名無しさんNGNG
>>721
アイタタタ。開き直ってるよコイツ。
0723デフォルトの名無しさんNGNG
Googleで検索すれば解決するような問題を一々質問するから煽られるわけだが。
0724デフォルトの名無しさんNGNG
つーか完全には解決してない希ガス
0725デフォルトの名無しさんNGNG
カスだから。
0726デフォルトの名無しさんNGNG
>>724
完全な解決法も知らないくせに (・∀・)ニヤニヤ
0727デフォルトの名無しさんNGNG
ゴキブリホイホイとしてしっかり機能しているな
0728デフォルトの名無しさんNGNG
 
0729デフォルトの名無しさんNGNG
std::stringには、文字列を数値に変換したり、数値を文字列に変換したりする関数はないんですか?
itoaとか使わなければならないんでしょうか。
0730デフォルトの名無しさんNGNG
std::stringには、文字列を数値に変換したり、数値を文字列に変換したりする関数はないんですか?
itoaとか使わなければならないんでしょうか。
0731デフォルトの名無しさんNGNG
std::stringには、文字列を数値に変換したり、数値を文字列に変換したりする関数はないんですか?
itoaとか使わなければならないんでしょうか。
0732デフォルトの名無しさんNGNG
std::stringには、文字列を数値に変換したり、数値を文字列に変換したりする関数はないんですか?
itoaとか使わなければならないんでしょうか。
0733デフォルトの名無しさんNGNG
>>729-732
std::stringstream使え。
0734デフォルトの名無しさんNGNG
std::stringには、文字列を数値に変換したり、数値を文字列に変換したりする関数はないんですか?
itoaとか使わなければならないんでしょうか。
0735デフォルトの名無しさんNGNG
std::stringには、文字列を数値に変換したり、数値を文字列に変換したりする関数はないんですか?
itoaとか使わなければならないんでしょうか。
0736デフォルトの名無しさんNGNG
std::stringには、文字列を数値に変換したり、数値を文字列に変換したりする関数はないんですか?
itoaとか使わなければならないんでしょうか。
0737デフォルトの名無しさんNGNG
std::stringには、文字列を数値に変換したり、数値を文字列に変換したりする関数はないんですか?
itoaとか使わなければならないんでしょうか。
0738デフォルトの名無しさんNGNG
std::stringstream
std::istringstream
std::ostringstream
boost::lexical_cast
0739デフォルトの名無しさんNGNG
すいません、便乗質問なんですけど、

std::stringには、文字列を数値に変換したり、数値を文字列に変換したりする関数はないんですか?
itoaとか使わなければならないんでしょうか。
0740デフォルトの名無しさんNGNG
すいません、似たような質問なんですけど、

std::stringには、文字列を数値に変換したり、数値を文字列に変換したりする関数はないんですか?
itoaとか使わなければならないんでしょうか。
0741デフォルトの名無しさんNGNG
atoi(s.c_str());
0742デフォルトの名無しさんNGNG
>>741
すいません、sが定義されていないって出たんですけど、
もう少し詳しく教えていただけませんか?

ところで、もう一つ質問なんですけど、

std::stringには、文字列を数値に変換したり、数値を文字列に変換したりする関数はないんですか?
itoaとか使わなければならないんでしょうか。
0743デフォルトの名無しさんNGNG
ググったら普通に解決したよ。
ここにいる連中はgoogle以下のクズばかりだな。
0744デフォルトの名無しさんNGNG
一人で貼ってたならマジうける(w
0745デフォルトの名無しさんNGNG
むかつくー

でも、問題があるんですけど、

std::stringには、文字列を数値に変換したり、数値を文字列に変換したりする関数はないんですか?
itoaとか使わなければならないんでしょうか。
0746デフォルトの名無しさんNGNG
>738をご利用ください
0747デフォルトの名無しさんNGNG
うわぁツマンネ 何コレ
0748デフォルトの名無しさんNGNG
もともと>>1が勝手に立てたただの糞スレですから
0749デフォルトの名無しさんNGNG
重複スレなのによくこんなにのびたなあ。
削除依頼も出なかったとは。
0750デフォルトの名無しさんNGNG
まんこ攻撃しちゃおっかな
0751デフォルトの名無しさんNGNG
まんこ
0752デフォルトの名無しさんNGNG
お前ら何なの<(`д´<
0753デフォルトの名無しさんNGNG
携帯からなので過去ログが読めません。既出だったらすみません。

std::stringには、文字列を数値に変換したり、数値を文字列に変換したりする関数はないんですか?
itoaとか使わなければならないんでしょうか。
0754デフォルトの名無しさんNGNG
>>753
std::stringstream
0755デフォルトの名無しさんNGNG
あまんこ
0756デフォルトの名無しさんNGNG
振り出しに戻った?
というわけで改めて。

std::stringには、文字列を数値に変換したり、数値を文字列に変換したりする関数はないんですか?
itoaとか使わなければならないんでしょうか。
0757デフォルトの名無しさんNGNG
>738をご利用ください
0758デフォルトの名無しさんNGNG
まんこ
0759デフォルトの名無しさんNGNG
>>756
int a;
std::stringstream s;

a = 10;
s << a;
std::printf("%s\n", s.str());
0760デフォルトの名無しさんNGNG
>>759
なぜstringstreamまで使っておきながらprintfなのかと子一時(ry
0761デフォルトの名無しさんNGNG
stringのイテレータをconst char*に変換できません。
たとえば次のようなソースはエラーになってしまいます。

string str="hoge";
char ch[100];
string::iterator it=str.begin();
sscanf(it,"%s",ch); <-ここがエラー

キャストで(const char*)itなどとやってもだめです。
解決方法を教えてください。
0762デフォルトの名無しさんNGNG
str.c_str() + std::distance(str.begin(), it)
0763デフォルトの名無しさんNGNG
iteratorはポインタで実装されているとは限りません。ポインタで
実装されているかは処理系定義です。まともな実装ほど、クラスで
実装されているように思いますが。
std::basic_string<>にはc_str()という関数があるのを知っていますか?
0764デフォルトの名無しさんNGNG
>>760
%sって書きたかったから。
0765761NGNG
c_str()の存在は知っています。
ただ、このポインタが指すchar配列の寿命がどれくらいか分からないので
困っているのです。
たとえばスクリプトの解読をする場合にも使っていいのでしょうか。
この場合、プログラムの最初の方でc_str()でポインタを取得し、
その後このポインタを進めていくことになるのですが。
0766デフォルトの名無しさんNGNG
>>765
心配ならc_str()から他のnewして確保した領域にコピーしとけ。
0767761NGNG
そうですね。Cの関数を使う時は、Cで用意されているものだけ使った方がいいのかもしれませんね。
一応、itの代わりに、&(*it)でコンパイルは通り、ちゃんと動いてはいるようなのですが、
このような使い方がよいのかどうか不安です。
0768デフォルトの名無しさんNGNG
>>767
だからイテレータをそういう用途に使うなと小一時間
0769デフォルトの名無しさんNGNG
なんでスクリプトの解釈にイテレータを使わない?
ポインタにしないと速度が遅いからか?
それなら初めからstd::stringを使わない方がいい。筋違いだよ。
0770761NGNG
sscanfを使いたいんですよ。スクリプトの解読にはこの関数が一番使いやすいんです。
ただ文字列はほとんどstd::stringで管理しているので、
この組み合わせができないかと思っていたんです。
C++にsscanfのような機能があればいいんですが。
ともかくもう結構です。>>766の方法でやります。
0771デフォルトの名無しさんNGNG
まぁ、どんな方法でも構わないけど。
boost::lexical_castでも似たようなことできるのに。
0772デフォルトの名無しさんNGNG
boost::regexでも使った方が幸せになれるのに。
0773デフォルトの名無しさんNGNG
>>770
> sscanfを使いたいんですよ。スクリプトの解読にはこの関数が一番使いやすいんです。

ネタかよ…
あんな糞関数を…
0774デフォルトの名無しさんNGNG
>>770みたいのがいるからいつまでたってもscanf()の脆弱性をついたアタッカーが
のさばる羽目になるんだ。
0775デフォルトの名無しさんNGNG
boostはstlではない。標準ではない。必ず使えるものではない。
0776デフォルトの名無しさんNGNG
一応まじめに注意点を。&(*it)で得られるポインタは使い物になるとは限らない。
なぜならば、以下の保証がないから。

・std::basic_string<>の内部で、連続した単一のバッファ上にデータを保持している保証
・終端が'\0'で終わる文字列である保証
・終端以外の文字に'\0'が入っていない保証
0777デフォルトの名無しさんNGNG
>>775
開発者がインストールすれば使えるじゃないか。
そしてユーザはBOOSTをインストールしなくても良い。
0778デフォルトの名無しさんNGNG
はぁ?BOOSTもランタイムライブラリ必要だぞ。
0779デフォルトの名無しさんNGNG
>>777は知ったか
0780デフォルトの名無しさんNGNG
static linkすればええやん
STL素敵やん
0781デフォルトの名無しさんNGNG
>>777-779は知ったか
0782デフォルトの名無しさんNGNG
boost1.32.0 releaseキタ
スレ違いスマソ
0783デフォルトの名無しさんNGNG
自分で分かってるなら書くなよ
0784≠770NGNG
>>774
sscanf()を使うことと、scanf()の脆弱性を付いたアタッカーがのさばることの因果関係は?
0785デフォルトの名無しさんNGNG
みなさん VC6 で STL を使うときって、
Dinkumware のバグ修正を手でやってます?
何か一発修正してくれるツールとかありませんか?
0786デフォルトの名無しさんNGNG
stlportを入れる
0787デフォルトの名無しさんNGNG
>>786
STLport は VC6 と相性いいですか?
使いやすいですか?
0788デフォルトの名無しさんNGNG
VC付属より200倍は使いやすい
0789デフォルトの名無しさんNGNG
そうですか、ありがとう。使ってみることにする。
VC7.1 の STL と比べてどうでしょうか?
0790デフォルトの名無しさんNGNG
とても締まりがいいです
0791デフォルトの名無しさんNGNG
>>790
ヤラシイナオマエ
0792dequeNGNG
前から (゚Д゚) 後ろから!
0793デフォルトの名無しさんNGNG
○ャノン勤務?(w
0794デフォルトの名無しさんNGNG
0795デフォルトの名無しさんNGNG
>>793
その会社なら○ヤノンじゃないのか?
0796デフォルトの名無しさんNGNG
そうだな
お手洗いだったか
0797デフォルトの名無しさんNGNG
この会社って○ャノンって言うと怒るんだよな
0798デフォルトの名無しさんNGNG
ここはキ○ノンと呼べば丸く収まる予感。
ただ俺にはキセノンに見えてしまうという罠。
0799デフォルトの名無しさんNGNG

だれか次のようなプロトタイプを持つ、
stringの前後にある空白文字を除去するプログラムを作ってください。
お願いします。

std::string trim(std::string str)
{
    /*ここに空白除去のコードを書く*/
    return str;
}

0800デフォルトの名無しさんNGNG
空白文字は、スペース、タブ、復帰改行です。
0801デフォルトの名無しさんNGNG
車輪の再発明をするよりは、
素直にboostのstring algorithmにあるtrimを使う方がいいんじゃないかと…
STLスレなんだけどな('A`)
0802デフォルトの名無しさんNGNG
std::string trim (const std::string& src, const std::string& space = " \t\r\n")
{
    std::string::size_type b = src.find_first_not_of(space);
    return src.substr(b, src.find_last_not_of(space) - b);
}

最発明ってほどのことでもないだろ
■ このスレッドは過去ログ倉庫に格納されています