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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
関連スレなどは>>2以降で
0002デフォルトの名無しさんNGNG
統合スレあるじゃん
0003デフォルトの名無しさんNGNG
なにこの重複スレ
0004デフォルトの名無しさんNGNG
糞スレを立てる>>1は糞ですね。
0005デフォルトの名無しさんNGNG
私、自分勝手な>>1のような人を軽蔑します。
0006デフォルトの名無しさんNGNG
>>1よくやった。
0007デフォルトの名無しさんNGNG
以後こっち

【C++】template 統合スレ -- Part5
http://pc5.2ch.net/test/read.cgi/tech/1091522597/l50

---- 糸冬了 ----
0008デフォルトの名無しさんNGNG
STLはSTLで分けてほしい。
でないとBoostまで一体化になってしまう。
0009デフォルトの名無しさんNGNG
個人的には、STLだけでも分厚い本がかけるぐらい広大なものだから、STL専用スレがあってもいいとおもうよ。
0010デフォルトの名無しさんNGNG
でもtemplateスレは他のC++スレより書き込み少なめだからそこでSTLも済ませてもいいと思うけど。
0011デフォルトの名無しさんNGNG
STLもBoostもtemplateの応用例の一部に過ぎないから。
そんなものがtemplateスレを埋めたら
PerlスレをCGIの話で埋めるようなもの。
0012デフォルトの名無しさんNGNG
STLってぶっちゃげ、何が便利なのよ?
0013デフォルトの名無しさんNGNG
標準である事
0014デフォルトの名無しさんNGNG
>>13
それは本質じゃねー
0015デフォルトの名無しさんNGNG
本質だよ。
気軽に使えるツールセットであるから便利なんだ。
0016デフォルトの名無しさんNGNG
Boostの方が便利ですよ
標準かどうか気にしなければいい
0017デフォルトの名無しさんNGNG
あるコンポーネントが自分のコンパイラで使えるかどうかも気にしなくていいしな。
0018デフォルトの名無しさんNGNG
Standard Template Libraryって、
Standard Container Libraryとかに名前変えたらどうよ?
0019デフォルトの名無しさんNGNG
>>16
個人で使うだけなら標準かどうかなんて気にしなくていいけどな
0020デフォルトの名無しさんNGNG
>>18
STLを1文字書き換えたOTLは形になるけどSCL→OCLは形になっていないので却下。
0021デフォルトの名無しさんNGNG
>>18
STLに含まれるのはコンテナだけじゃないから却下
0022デフォルトの名無しさんNGNG
コンテナだけ切り放そうよ。
0023デフォルトの名無しさんNGNG
STLって一番どういう時に便利なのですか?
まだ始めたばかりで、便利さがよくわからないのですが
0024デフォルトの名無しさんNGNG
>>23
バイナリのサイズを増やしたいときとか、すごく便利。
ほかのライブラリじゃ絶対無理。
0025デフォルトの名無しさんNGNG
それよりも>>22を見放したい。
0026デフォルトの名無しさんNGNG
>>24
なんせサイズが10倍になるからな。
界王拳みたいなもんだ。
0027デフォルトの名無しさんNGNG
>>26
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。
0028デフォルトの名無しさんNGNG
longからstringに変換したいのですが、
エレガント(いかにもC++っって感じのやつ)な方法ありませんか?

0029デフォルトの名無しさんNGNG
stringクラスのfindメソッドについて質問です。

string word = "電話コード 0120-123-[123]"

string::size_type pos = word.find("[");

とした場合、電話コードの"ー"の位置が返却されるようなのですが、
"["を正確に検索するにはどうすればよいのでしょうか?

0030デフォルトの名無しさんNGNG
>>23
プログラム界の長有名人のエビステーメーさんの書籍によると、
STLを使うことで、プログラムコードが100分の1になるそうです。

0031デフォルトの名無しさんNGNG
>>29
wstring word = L"電話コード 0120-123-[123]";

wstring::size_type pos = word.find("[");
0032>>29NGNG
>>31
神さま!レスありがとうございます。
ダブルコーテーションの前にLを付けると、どのような意味になるのでしょうか?
何度もすいません・・・
0033デフォルトの名無しさんNGNG
>>32
ワイド文字列(多くの場合UTF16)として扱われる。
ShitJISは2バイト文字の2バイト目に1バイト文字と重なること(「ー」の2バイト目が[と同じだったり)がたびたびあるが、
ワイド文字は全ての文字が同一サイズ(UTF16なら2バイト)に固定されているのでそのようなことは起きない。

>>28
#include <sstream>
#include <string>
long l;
std::ostringstream oss;
oss << l;
後はoss.str();でstd::string型を返すから、std::stringの変数に代入するなり、関数の引数にoss.str().c_str()を書いたりご自由に。
0034デフォルトの名無しさんNGNG
>>28
std::string str;

long n = reinterpret_cast<long>(str.c_str());
0035デフォルトの名無しさんNGNG
>>28
long l (100);
string s (boost::lexical_cast <string> (l));
0036デフォルトの名無しさんNGNG
>>33
>>33
>>35
みなさん、ありがとうございます。

0037デフォルトの名無しさんNGNG
int main(int argc, char* argv[])
{

wstring ss2 = L"顧客コード";

cout << ss2.c_str() << endl;



getch();

return 0;
}

というプログラムコードを実行すると、
コンソールに次の表示されます。なぜ顧客コードと表示されないのでしょうか?

<コンソールの表示内容>
004800B2

0038デフォルトの名無しさんNGNG
wcout << ss2 << endl;
0039デフォルトの名無しさんNGNG
ていうかその辺STLじゃないだろ
0040デフォルトの名無しさんNGNG
>>38
>>39
回答ありがとうございました!
0041デフォルトの名無しさんNGNG
>32
それよりも wstring に注目しろ
0042デフォルトの名無しさんNGNG
>>30
STLを使うと、コードが100分の1になるって本当なんですかね?
職業プログラマの告白きぼんぬ!

0043デフォルトの名無しさんNGNG
思えば俺もTurboC++1.0から始めたはずなのに・・・
この差はいったい何なんだ・・・・
0044デフォルトの名無しさんNGNG
おひる
0045デフォルトの名無しさんNGNG
>>43
「この差」って何?C++にいろいろ機能が加わった事か?標準規格が固まってから
もう6年も立ってるぞ。そろそろ覚えろや。
0046デフォルトの名無しさんNGNG
>>42
STL使わないコードがSTL使うようになると100分の1に減るのは
元のコードの99%がSTLと同等の内容で、残り1%がアプリケーションの場合。
STLの規模は全部合わせても1メガバイト程度だから、
アプリケーションのためのコードは最大で10キロバイト程度ということになる。
その程度の小規模プログラムなら増えた減ったは誤差の範囲になる。
STLのコンテナ系は数日で書ける規模だから
通常のプログラムでコードが100分の1になるのはありえない。
元のコードが冗長なゴミで埋め尽くされてるなら
STLによって100分の1に減らすこともできるかもしれないが、
それはあまりに異常な設計だから
STLを使えばコードが100分の1になるという一般論を導くことにはならない。
0047デフォルトの名無しさんNGNG
>STLのコンテナ系は数日で書ける規模だから
信じられん。
プロってすごいんだな。煽りじゃなく。
STLのアルゴリズム系についてはどうなの?
0048デフォルトの名無しさんNGNG
>47
アルゴリズムも恐らく数日で書き切れると思います.
個人的な感覚ではコンテナに比べてアルゴリズムの方がだいぶ楽だと思います.
0049デフォルトの名無しさんNGNG
車輪の再開発をするのは、あまり利口ではないな
0050デフォルトの名無しさんNGNG
C++はバッドノウハウのかたまり
だから
STLはバッドノウハウも塊
0051デフォルトの名無しさんNGNG
>>50
例えば?
0052デフォルトの名無しさんNGNG
wstringとstringのそれぞれの変換をcodecvtをつかってできるときいたのですが、
具体的な方法を、プログラムコードで教えてもらえたいのでっすが・・・
0053デフォルトの名無しさんNGNG
>STLのコンテナ系は数日で書ける規模だから

なわけないだろ。
0054デフォルトの名無しさんNGNG
>53
もちろん>>48はネタに決まってる。言うだけタダだもんねえ。
0055デフォルトの名無しさんNGNG
queueやdequeくらいなら半日もかからないな。
iteratorで触れるタイプは一日くらいだろう。
一日半もあれば確実。iteratorでさらに一日。
コンテナ全部を数日でできない人は何に時間をかけてるんだ?
0056デフォルトの名無しさんNGNG
>>55
嘘もここまで来ると立派なもんだ。
0057デフォルトの名無しさんNGNG
すでにalgorithmとiteratorがあったら
vectorあたりは半日で書けるだろ。
0058デフォルトの名無しさんNGNG
>>55
テスト
0059デフォルトの名無しさんNGNG
deque程度を半日で書けないプログラマは
いっそ辞職なさい

あれは普段普通に書くtemplate classの最低限の規模です
0060デフォルトの名無しさんNGNG
漏れ半日じゃstackも書けないや(´・ω・`)ショボーン
0061デフォルトの名無しさんNGNG
minに一日
maxに一日
medianに三日かかる人だって立派に生きてます
0062デフォルトの名無しさんNGNG
>>59
もちろんパフォーマンス的なチューニングは完全なんだろうな。
ただ書くってだけなら俺にもできるが、遅かったら作る事自体が意味がない。
0063デフォルトの名無しさんNGNG
>>62
詭弁でたー
0064デフォルトの名無しさんNGNG
>>62
STLのdequeはパフォーマンス的によほど優れてるということですか。
で、それはなぜ?
0065デフォルトの名無しさんNGNG
>62
もちろんSTL dequeのパフォーマンス的なチューニングは完全なんだろうな?
0066デフォルトの名無しさんNGNG
STLの要件を満たすモノを数日で?はぁ?

vector,list,deque,map,set,multimap,multiset (queue,stack
これらを数日でねぇ。
テスト等の手間も考えての発言とは思えないな。

ま、口だけならなんとでもいえるからなw
2ch上では優越感に浸らしてあげようじゃないのw

すごいでちゅねーw
0067デフォルトの名無しさんNGNG
>>66
おまえならそれぞれ何日かけて作る?
0068デフォルトの名無しさんNGNG
STLが今の姿になるまでの年月はなんだったんだ
0069デフォルトの名無しさんNGNG
書けないって言ってる奴はネタだろ。

20年ほど前のCでどろどろ書いてた時代じゃ
STLで書かれてたような基本アルゴリズムは
毎日大量に書かれてたし、
それから20年間の経験によってまとめられた設計案を
いざSTLのような汎用ライブラリーとして書いてみろと言われたら
それこそ数日もかからない。
テスト?何十年も親しんできた類似コードを
また同じように書き直しただけだ。
テストするのに時間かかるわけがない。
hello worldのテストに1ヶ月かけたい人から見れば不安だろうけどな。
0070デフォルトの名無しさんNGNG
相変わらずツマンネー釣りだな
0071デフォルトの名無しさんNGNG
>20年ほど前のCでどろどろ書いてた時代じゃ
>STLで書かれてたような基本アルゴリズムは
>毎日大量に書かれてたし、

そんなに大量にかかれていたんなら、100分の1になりそうだな
0072デフォルトの名無しさんNGNG
プログラマーほど技術の上下の差の激しい分野はないからな。
できる奴は、できてあたりまえ、できないはずがない、と思い込んでるし。
できない奴は、できなくてあたりまえ、できるはずがない、と思い込んでるし。
レベルが1つずれるだけでこういう認識の違いが生まれるのに、
一番上と一番下の距離は更に遠い。

そいつらの間で起きるできるできない論争は見てて笑える。
0073デフォルトの名無しさんNGNG
日常生活で触れる言語はプログラミング言語がほとんどで
自然言語はほとんど使わない生活を十年以上続けてる特殊な人達は
ネイティブスピーカーになってるので、
その人達の数日と一般プログラマの数日を一緒にしてはいけない。
0074デフォルトの名無しさんNGNG
まあ、口だけで作ったことも無い奴の
できる発言ほど当てにはならないってことだ。
見ててマジわらえるw
0075デフォルトの名無しさんNGNG
恐らく授業でアルゴリズムについて勉強しだした学生さんだろ。
0076デフォルトの名無しさんNGNG
今までは1000人いたら1000通りのSTLのようなものがあったわけだ
だったら1/100どころの話じゃないね
0077デフォルトの名無しさんNGNG
例外安全やチューニングなし、コンテナ要件を厳密に満たす必要ないなら一日で書けるよ
テストもなしで誰も使わないだろうけど


dequeue半日でできるとか言ってるスーパープログラマーは
boostに参加して腕を奮ってくださいな
0078デフォルトの名無しさんNGNG
そんなに「作れる作れる」言うなら、dequeでも何でもいいからコンテナを
作ってどこかで晒してみろよ。

それもしないで信じろという方が無理だ。
0079デフォルトの名無しさんNGNG
みんな口だけなので無理
0080デフォルトの名無しさんNGNG
boostを作ったのは、この俺です
0081デフォルトの名無しさんNGNG
>>80
小さい頃に教えられなかった?「嘘つきは泥棒の始まり」って。( ´,_ゝ`)プッ
0082デフォルトの名無しさんNGNG
再びチョビひげの男に疑いを持たれたその時、村のあちこちで爆発が起こります。
0083デフォルトの名無しさんNGNG
STLコンテナが低レベルって言ってるやつは
どうせ同じ物を作れると言っても見本を見ながらしか書けない
0084デフォルトの名無しさんNGNG
>>83
お前以外に誰が低レベルと言ってたっけ?
0085デフォルトの名無しさんNGNG
dequeue見てみたが、コメント除くと異様に小さいな。
このサイズだと速い奴なら1時間から数時間、
遅い奴なら数日から数カ月か
0086デフォルトの名無しさんNGNG
deque実装の最小サイズ競争でもしてみますか。
徹底的に無駄を除去して1バイト単位で削ればどこまで
小さくできるか。
0087デフォルトの名無しさんNGNG
>>86
やっぱりメンバ関数とかコンストラクタはstd::dequeに完全準拠が条件?
0088デフォルトの名無しさんNGNG
コメント除いて
stlportでも古いRWでも1500行はあるように見えるが
deque
(どっちもalgorithmとかiterator多用で1lineが長い)
0089デフォルトの名無しさんNGNG
>>87
それだとただのコピペ書き換え合戦なので、
多少の独自性はいいんじゃないかな。
ただしiteratorは使えないと意味が無いので必須条件。
0090デフォルトの名無しさんNGNG
つかdequeの代わりに使えなかったら意味無いから
インターフェースは同じじゃなきゃ意味無いだろ。
内部実装はどうでもいいけど。
0091デフォルトの名無しさんNGNG
>コメント除いてstlportでも古いRWでも1500行はあるように見えるがdeque

日本語でお願い
0092デフォルトの名無しさんNGNG
>>91
倒置法はならったかな?
0093デフォルトの名無しさんNGNG
とうち-ほう
文において、普通の語順と逆にして語句を配置し修辞上の効果をあげる表現方法。「出た、出た、月が」「進もう、未来へ」の類。
0094デフォルトの名無しさんNGNG
末尾に助詞をつけない倒置法があるのか
0095デフォルトの名無しさんNGNG
>>92
体言止めと倒置法の併用だな。小学生高学年くらいで習ったっけか?
0096デフォルトの名無しさんNGNG
記号「<」の省略に一票
0097デフォルトの名無しさんNGNG
「…1500行はあるように見えるがdequeである」
の末尾「である」を省略したのなら体言止め
0098デフォルトの名無しさんNGNG
dequeをdequeueって間違っている奴は、"デキュー"って読んでいるわけ?
"デック"だよ…頼むよ…

> コンテナ要件を厳密に満たす必要ない

それはゴミだ。
0099デフォルトの名無しさんNGNG
両端キューなんだから
デキューでもいいじゃん
0100デフォルトの名無しさんNGNG
読み方なんてどうでもいいって言ってる香具師は、プログラムもいい加減に
しか書けなさそう。
0101デフォルトの名無しさんNGNG
char
これをチャーと呼んでもキャラと呼んでもいいのと一緒でしょ。
■ このスレッドは過去ログ倉庫に格納されています