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

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

レス数が1000を超えています。これ以上書き込みはできません。
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
これをチャーと呼んでもキャラと呼んでもいいのと一緒でしょ。
0102デフォルトの名無しさんNGNG
http://www.wakhok.ac.jp/~sumi/stl/header/deque.html

0103デフォルトの名無しさんNGNG
それは公式見解なんですか?
ただの個人ページでは無いのですか?
0104デフォルトの名無しさんNGNG
dequeがdouble ended queueの略だというのは理解してる?
0105デフォルトの名無しさんNGNG
Sunもこう言っていますよ。
http://66.102.7.104/search?q=cache:7vD8GRucE_IJ:java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/LinkedList.html+deque+%E3%83%87%E3%82%AD%E3%83%A5%E3%83%BC&hl=ja&lr=lang_ja&inlang=ja

この人たちも。
http://www.doumo.jp/aon-java/jsp/postgretips/tips.jsp?tips=3
http://wwws.kobe-c.ac.jp/deguchi/c/list/llist.html
http://www.att.or.jp/perl/pdsc/pdsc-0j.html
http://www.cc.nao.ac.jp/vppman/HTML/japan/langCpls/stl/stdref/sta_9602.htm
0106デフォルトの名無しさんNGNG
en-queue エンキュー キューに入れる。
de-queue デキュー キューから出す。
両方の端からエンキュー・デキュー出来るから"double ended" queue

# 専門用語なんて、そのカテゴリに凝り固まってるヲタどもの自己満足のためにしか存在価値がない、とか思ってる口か?
0107デフォルトの名無しさんNGNG
98が窮地に・・
0108デフォルトの名無しさんNGNG
これを機に>>98も心を入れ替えてくれるでしょう
0109デフォルトの名無しさんNGNG
>107,108
自演ですか?(・∀・)
011098NGNG
http://foldoc.doc.ic.ac.uk/foldoc/foldoc.cgi?deque
http://www.sgi.com/tech/stl/Deque.html
これでいいですか? 暇な人はKnuth参照してねん。
0111デフォルトの名無しさんNGNG
略語をどう発音するかは各自流儀が生まれやすくどれも間違いではない。
dequeを [dek] と発音する人もいれば [dekju:] と発音する人もいる。
Knuthは [dek] を支持したがこれも流儀の一つに過ぎない。
それはさておき
>>98
> dequeをdequeueって間違っている奴は、"デキュー"って読んでいるわけ?
> "デック"だよ…頼むよ…
「dequeという表記が正しくdequeueと表記が間違い」か否かについては
発音とは異なる問題。
もし "double-ended queue" の略として "dequeue" を書いたならば
語源が "double-ended queue" であることについては争いの無いことであり
"deque" と "dequeue" のいずれも分かる範囲まで略した結果に過ぎないため、
"deque" が間違いではないという前提がある以上、"dequeue" が間違いとは言えない。
もしクラス名 "deque" という固有名詞ないしプログラミング言語で記述される識別子
を表現しているつもりであれば、"deque" を意味して "dequeue" と表記することは
不適切かつ間違いである。人間だけでなくコンパイラでさえもそれをエラーと指摘する。
さて「dequeという表記が正しくdequeueと表記が間違い」の是非についてだが、
上記いずれのつもりであるかの背景を無視して間違いを指摘することはできない。
強いて言えば、背景について触れずに他方の意見を間違いだと断定することが
唯一の間違いである。そのような行為は98だけが行っている。
0112デフォルトの名無しさんNGNG
pngは絶対に「ぴんぐ」だからな。それ以外は認めないよ。
0113デフォルトの名無しさんNGNG
>>111
"deque"を"dequeue"って表記している本って例えばどんな糞本?
0114デフォルトの名無しさんNGNG
98しつこいよ98
0115デフォルトの名無しさんNGNG
わかった!俺って天才かも。

dequeをdequeueと書く理由は、dequeと書いてしまうと、std::dequeの機能を
全部取り入れたコンテナを自作するという意味になってしまうので、dequeue
と最初から書いておく事によって、後から「これ違うじゃん」と突っ込みを入れ
られても、「だってdequeueだよ。dequeじゃないじゃん」と言い逃れできる余地
を残しておくためだろ。
0116デフォルトの名無しさんNGNG
やっちゃった
0117デフォルトの名無しさんNGNG
double-ended queueの意味でdequeueは良く使われてる
http://www.google.com/search?q=dequeue+%22double+ended+queue%22&lr=
0118デフォルトの名無しさんNGNG
>>117
それがstd::dequeとどんな関係があるんだよヴォケ
0119デフォルトの名無しさんNGNG
とりあえずdequeぽいのでけた.

今のstd::dequeに新規に機能追加するとしたら何でしょうかね?
個人的にはbuffer拡張とかブロックサイズとかがポリシーになってたらなぁと思ったり
0120デフォルトの名無しさんNGNG
だから、アロケータ書けよ
0121デフォルトの名無しさんNGNG
>120
いや,アロケーションの話ではなくてstd::dequeは
内部のバッファをreserveしないといけないはずなので,
そのreserveに関するポリシーがあっても良さげかなと思ったんですよ.
vectorも同じですけれど.
0122デフォルトの名無しさんNGNG
>>119
どうでもいいけどどっかに晒してみろよ。それまでは虚言と同じだから。
0123デフォルトの名無しさんNGNG
アロケータとイテレータが面倒すぎて投げた。
0124デフォルトの名無しさんNGNG
アロケータとイテレータがメインじゃないか。
0125デフォルトの名無しさんNGNG
イテレータがないとアルゴリズムが全く使えん。アロケータがなければboostの
poolでも使えばいいが。
0126デフォルトの名無しさんNGNG
STLじゃなくてもいのですが
データベースアクセスクラスでいいものはありませんか?
Linuxでやりたいので,MFCはなしでアドバイスお願いします。
0127デフォルトの名無しさんNGNG
Linux/GNUにまともなクラスライブラリを期待してはいけない
0128デフォルトの名無しさんNGNG
>>127
悪い思い出でも?
0129デフォルトの名無しさんNGNG
>>126
MONOを入れたらADO.NETが使えるらしいよ。
0130デフォルトの名無しさんNGNG
>>126
sourceforgeやfreshmeatにいくつか転がってるので
どれでも好きなものを
0131>>52NGNG
みなさん、議論の途中で申し訳ないのですが、>>52へのご教授もお願いします・・・
0132デフォルトの名無しさんNGNG
$(GCC)/libstdc++-v3/testsuite/22_locale/*に山ほどある。
0133>>52NGNG
>>132
GCCもってないんです・・・
0134デフォルトの名無しさんNGNG
>>133
インストールすればいいだろ。
0135132NGNG
>>133
このクズが!ここで見ろ
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc%2b%2b-v3/testsuite/
0136名前は開発中のものです。NGNG
>135
おいこら! DLできねえぞチョン公!
0137デフォルトの名無しさんNGNG
codecvt回りならgoogleで引っかかるRogue Waveのドキュメントがまぁまとまってるんじゃないか。
あれ、WWWで公開されてていいものなんか知らんが。
0138デフォルトの名無しさんNGNG
http://msdn.microsoft.com/library/en-us/dnvs05/html/stl-netprimer.asp
STL.NET
0139デフォルトの名無しさんNGNG
wstringからstringの変換をしたいのですが、
以下の???に何をいれたらいいのかわかりません。
MicroSoftによると、inメソッドの定義は次のようです。

<MicroSoftの説明>
result codecvt::in(State& state,
const To *first1, const To *last1, const To *next1,
From *first2, From *last2, From *next2);

しかし、first1は何かとか、last1が何かとか具体的な説明がないため、
わかりません。

以下のコードの、???の部分に何を入れたらいいのかご教授お願いします。

int main(int argc, char* argv[])
{

codecvt<wchar_t, char, mbstate_t> strcvt;

mbstate_t stateObj;
string str;
wstring wstr = L"あしたは晴れだ";
strcvt.in(???);




return 0;
}
0140デフォルトの名無しさんNGNG
http://43.232.14.60:8070/playlist.pls?mount=/icy_1&file=dummy.pls
0141デフォルトの名無しさんNGNG
>>139
↓MSDNのサンプル

char* pszExt = "This is the string to be converted!";
wchar_t pwszInt [LEN+1];
memset(&pwszInt[0], 0, (sizeof(wchar_t))*(LEN+1));
char* pszNext;
wchar_t* pwszNext;
mbstate_t state;
locale loc("C");//English_Britain");//German_Germany
int res = use_facet<codecvt<wchar_t, char, mbstate_t> >
( loc ).in( state,
pszExt, &pszExt[strlen(pszExt)], pszNext,
pwszInt, &pwszInt[strlen(pszExt)], pwszNext );
pwszInt[strlen(pszExt)] = 0;
wcout << ( (res!=codecvt_base::error) ? L"It worked! " : L"It didn't work! " )
<< L"The converted string is:\n ["
<< &pwszInt[0]
<< L"]" << endl;
exit(-1);
0142デフォルトの名無しさんNGNG
DirectShowフィルタを書いてるんですがそのなかでvectorを使うと次のようなエラーが出てしまいます。
どうすればよいかご存知の方いますか?

C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\xstring(527) : error C2059: 構文エラー : 'catch'
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\xstring(521): クラス テンプレートのメンバ関数 'void __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::_Copy(unsigned int)' のコンパイル中
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\xstring(527) : error C2143: 構文エラー : ';' が '{' の前に必要です。
0143142NGNG
書き忘れましたがVC++6.0です。
0144>>139NGNG
>>141
ひょえ〜〜〜〜〜〜
難しすぎ!!

wstringからstringに変換するだけでこんなにコード書かなきゃいけないのか・・・・
こんなのをイメージしてたのにぃ・・・・

string = "あしたははれだ";
wstring wstr = codecvt.wstringTOstring(str);

0145デフォルトの名無しさんNGNG
>>144
一見難しく見えるが、一番最初にくっついてるのは変数の初期化だし、
一番最後にくっついてるのは結果出力だし。

肝の部分は

use_facet<codecvt<wchar_t, char, mbstate_t> >
( loc ).in( state,
pszExt, &pszExt[strlen(pszExt)], pszNext,
pwszInt, &pwszInt[strlen(pszExt)], pwszNext );

だな。
codecvt は直接インスタンスを生成できないから。
use_facet( locale ) を使って取得しないといけない。
0146デフォルトの名無しさんNGNG
だからgccのサンプル見ろって。
MSDNのサンプルは質の低いのが多いから。
(多くをアルバイトが書いているらしい)

wstringstream使えな。
0147デフォルトの名無しさんNGNG
MSのはサンプル以前にSTL自体の質が・・・。
0148デフォルトの名無しさんNGNG
>>147
詳しく説明して下さい
0149 ◆FIcNi4f8js NGNG
MSに質を求める方が間違ってる
0150デフォルトの名無しさんNGNG
最新の奴はいけてるんでしょ。VC++って。

特にライブラリはプラウガがやってるしなあ。
100%適合の数少ない一つでしょ、ダンキンのライブラリ。
0151デフォルトの名無しさんNGNG
VC++ 6.0まではいまいちだったけど
0152デフォルトの名無しさんNGNG
今時VC++の質を叩いている奴は、
使えないロートルだな。
0153デフォルトの名無しさんNGNG
>>144 素直にVCのマクロ使えば?
USES_CONVERSION;
MessageBoxA( W2A(L"今日はあめだ") );
0154デフォルトの名無しさんNGNG
>>153
結論からいけばそうだろうけど
でも彼はcodecvを使ってやりたかったのでしょう。
0155デフォルトの名無しさんNGNG
>>138
スレ違いで申し訳ないのですが、よかったらでいいのですが、
そういった記事(情報)はどうやって得るのか教えていただけないですか?
MSDNのホットトピックが配信されるようなMSのMLみたいなものがあるのですか?
0156デフォルトの名無しさんNGNG
>>144
こういうのはどうか?
#include <windows.h>
#include <string>
std::wstring to_wstring(const std::string& str) {
  std::wstring wstr;
  unsigned BufLen = MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.length(), NULL, 0) + 1;
  wstr.resize(BufLen);
  MultiByteToWideChar(0, 0, str.c_str(), str.length(), &wstr[0], BufLen);
  return wstr;
}

イメージ通りに使えるぞ。
#include <iostream>
using namespace std;
int main() {
  string str = "hogehoge";
  wcout << to_wstring(str) << endl;
  return 0;
}
0157デフォルトの名無しさんNGNG
#include <windows.h>
#include <string>
std::wstring to_wstring(const std::string& str) {
  vector<wchar_t> buf(MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.length(), NULL, 0) + 1);
  MultiByteToWideChar(0, 0, str.c_str(), str.length(), &buf[0], buf.size());
  return std::wstring(buf.begin(), buf.end());
}
0158デフォルトの名無しさんNGNG
mapで確保されるメモリ容量はどう計算したらいいでしょうか?
たとえば、
map<char,char>でN個のデータを確保した場合、2*N byteでいいですか?
どうも使用メモリ量が予想よりも多い気がします。
0159デフォルトの名無しさんNGNG
>>158
そんなもん実装次第だがポインタ1個分は加わるだろ
0160デフォルトの名無しさんNGNG
>>159
pointerだから1個につき4バイトですかね。漏れの場合は予想より3倍近くいってるのでびっくりしたわけです。
実装がまずいのかな。ちょっと見直してみます。
0161デフォルトの名無しさんNGNG
>>160
お前の頭が一番まずいよ
0162デフォルトの名無しさんNGNG
うん、まずいな。
0163デフォルトの名無しさんNGNG
内部実装がRB-Treeだとすると,各ノード当たり
ポインタ3つ(左右の子と親)と色のenumが余計に付いていると
予想するのが妥当ですかね?ま,実装読めば良い話なんですが.
0164デフォルトの名無しさんNGNG
>>163
RB-Treeの場合、色をポインタに埋め込んで持っていて
領域を特別確保していないことが多いとよく聞く。少なくとも
手元の実装ではそうなっていた。
0165デフォルトの名無しさんNGNG
>>164
( ・∀・)つ〃∩ ヘェーヘェーヘェー.っていうか良くやる手ですよね.
VC++7.1ではポインタ3つ+char2つ余分に付いてました.
とりあえず最低限ポインタ3つ(iteratorの実装のために親へのポインタも不可避なはず)
は余分に使うってことですね.
0166デフォルトの名無しさんNGNG
>>158
sizeof関数で取得できます。
例えばintなら、

int i;
sizeof(i);

0167デフォルトの名無しさんNGNG
> sizeof関数
> sizeof関数
> sizeof関数
0168デフォルトの名無しさんNGNG
sizeof int
0169デフォルトの名無しさんNGNG
return関数みたいなもんじゃないの?
0170デフォルトの名無しさんNGNG
> return関数
> return関数
> return関数
0171デフォルトの名無しさんNGNG
似たような奴で、C++では新しく
typeid関数 throw関数
とかも増えたんだろうな。
0172デフォルトの名無しさんNGNG
if関数はいいんだけど、for関数とかdo-while関数ってなんか文法的におかしいよね。
0173デフォルトの名無しさんNGNG
>>171
int関数もだろ。
0174デフォルトの名無しさんNGNG
ネタはマ板でやってくんないかなあ・・・
0175デフォルトの名無しさんNGNG
>>156
stringはvectorと違って、メモリレイアウトは配列コンパチじゃないぞ
0176デフォルトの名無しさんNGNG
>>175
そりゃ知らなかった。
#include <windows.h>
#include <string>
std::wstring to_wstring(const std::string& str) {
  unsigned BufSize = MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.length(), NULL, 0) + 1;
  PWSTR wpszBuf = new WCHAR[BufSize];
  MultiByteToWideChar(0, 0, str.c_str(), str.length(), wpszBuf, BufSize);
  std::wstring wstr(wpszBuf);
  delete[] wpszBuf;
  return std::wstring(wstr);
}
0177デフォルトの名無しさんNGNG
#include <windows.h>
#include <string>
std::wstring to_wstring(const std::string str) {
  vector<wchar_t> buf(MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.length(), NULL, 0) + 1);
  MultiByteToWideChar(0, 0, str.c_str(), str.length(), &buf[0], buf.size());
  return std::wstring(buf.begin(), buf.end());
}
0178デフォルトの名無しさんNGNG
>>175
配列互換じゃないなら、basic_string::data()をどう説明するの?
具体的に、シリアルになってない実装のSTLとかあるの?

(・∀・)ニヤニヤ
0179デフォルトの名無しさんNGNG
>178
より正確に表現するなら「配列互換であることが標準のどこにも保証されていない」.
実際,シリアルになっていない実装は少ないと思いますが,
それはあくまで多くの実装が「たまたま」シリアルな実装になっているだけでしょう.
ベンダの裁量次第では例えば配列互換でない実装をしておいて,data()が呼ばれたときに
シリアルに再配置してその先頭ポインタを返す,なんて実装をされていても
文句は言えないということです.
0180デフォルトの名無しさんNGNG
ropeを使ってbasic_stringを実装していると、

>>179
> data()が呼ばれたときにシリアルに再配置してその先頭ポインタを返す,

となるね。

http://www.sgi.com/tech/stl/Rope.html

const charT* c_str() const
Returns a pointer to a null-terminated sequence of characters
that contains all of the characters in a rope. [5] [6] The
resulting sequence of characters is valid at least as long as
the rope remains valid and unchanged. Note that the first
invocation of this operation on long strings is slow: it is
linear in the length of the rope.
0181デフォルトの名無しさんNGNG
シリアル配置したコピーバッファをc_str(), data()関数で提供しつつ、
内部で断片化されたデータを使い続けるような2度手間な実装だったら、ある意味凄い。
・・・つか、イラネ。
0182デフォルトの名無しさんNGNG
stringは、resize()でヌルセットされる実装である点なども考慮して
MFCのCStringみたいに生バッファアクセスを許可して欲しいところだ。
最大の問題はreserve()がVCとgccで挙動が違うところだと思う。
0183デフォルトの名無しさんNGNG
>>178
「規格に関係なく書いたコードでも動けばよい」というような
態度は周りが迷惑する。
0184デフォルトの名無しさんNGNG
>>183
迷惑ってんなら、「規格」も周りに迷惑をかけまくってるだろ。

とりあえず、論より証拠で不具合が発生するSTLベンダ名をうpしてくれ。あるんだろ?
話はそれから。
0185184NGNG
複数のインスタンスから参照されるアドレスを上書きと問題が起こるのは既知だけどな。
参照カウンタを自力でリセットしてから>>156のようにやるのは、なかば常識だろ。
0186デフォルトの名無しさんNGNG
>>185
君の常識はみんなの非常識
0187デフォルトの名無しさんNGNG
>>184
可哀想なくらい頭悪!
0188デフォルトの名無しさんNGNG
>>184
君の論法は「国の法律は俺にとっては都合が悪いからどんどん変えてくれ」
と言っているのと全く同じだね。

(・∀・)ニヤニヤ
0189デフォルトの名無しさんNGNG
>>188
君はまず国語を理解した方がいいね。
0190デフォルトの名無しさんNGNG
>>189
おやおや姦国人ですか?日本語が読めないとは。
0191デフォルトの名無しさんNGNG
どうでもいいからさ、不具合のあるSTL挙げてくれよ(プゲラ
実際に体験したからご立派なこと言ってんだよね?>>178
ちゃんと報告して下さいね(プゲラ
0192デフォルトの名無しさんNGNG
(プゲラ
(プゲラ
(プゲラ
0193デフォルトの名無しさんNGNG
>>191
>>180 嫁。
0194デフォルトの名無しさんNGNG
vector以外はシリアルな実装になっていると保障されていないので
vector以外を C API に直接渡したり、直にバッファをいじったりするコードは
移植性が下がる
0195デフォルトの名無しさんNGNG
>>191==アフォ
0196デフォルトの名無しさんNGNG
哀れすぎる
0197デフォルトの名無しさんNGNG
ISO規格ではvectorも保証されてないだろ。
現在時期C++に向けての修正案で保証するべきという用件があがっているだけで。
0198デフォルトの名無しさんNGNG
1つのサイズがわずか1or2バイトであるstringの連続性が保証されず、
サイズが可変であるvectorの連続性が保証されるというのも不思議な話だ。
0199デフォルトの名無しさんNGNG
はぁ?
0200デフォルトの名無しさんNGNG
何不明
0201デフォルトの名無しさんNGNG
1つのサイズがわずか1or2バイト
1つのサイズがわずか1or2バイト
1つのサイズがわずか1or2バイト
0202デフォルトの名無しさんNGNG
>>198
T array[N]; の連続性も不思議だと思うのかな。
0203デフォルトの名無しさんNGNG
>197
いえ,保証されています.
ISO/IEC IS 14882:1998にvectorの連続性の保証を追加するという提案は
すでにTC(Technical Corrigenda:正誤表)として正式に受理されています.
要するにvectorの連続性の保証の記述が無かったのは単に誤植だという扱いです.
新しい版の規格書ではすでに修正されています.

http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#69
0204197NGNG
>>203

オタク臭い文章・・・。やはりC++ユーザーってちょっとアレだな
0205203NGNG
>204
自分でもそう思いますw
0206デフォルトの名無しさんNGNG
Ruby >>>>>>>>>>>>>>>>>>>>>>> C++=臭いオタク寄るな
0207デフォルトの名無しさんNGNG
なぜ素直に「そうだったんですか。知りませんでした」
と言えないんだ>>204のオタクは
騙り臭いし
0208デフォルトの名無しさんNGNG
>>205
204はテンプレだよ
0209デフォルトの名無しさんNGNG
listやvectorに対するrbegin/rendって標準でしたっけ。
0210デフォルトの名無しさんNGNG
>>209
標準
0211デフォルトの名無しさんNGNG
・・・ですね。

rbeginでとったiterator経由でeraseしようとしても失敗しちゃうのは仕様
ッスかね?

list<int> mylist;
mylist.push_back(1);
mylist.push_back(2);
mylist.push_back(3);
itr = mylist.rbegin();
mylist.erase(itr); // コンパイルエラー

0212デフォルトの名無しさんNGNG
仕様
0213デフォルトの名無しさんNGNG
>>211
rbegin()で返ってくるのはreverse_iteratorであってiteratorじゃない。
0214デフォルトの名無しさんNGNG
>>211
後ろ消したいんだったら空でないこと確かめて
list <int>::iterator itr (-- mylist.rbegin().base ());
か
list <int>::iterator itr (-- mylist.end ());
0215デフォルトの名無しさんNGNG
か
pop_back
(本題と外れてるけど)
0216デフォルトの名無しさんNGNG
嘘を教えてる人がいるYO。
0217デフォルトの名無しさんNGNG
嘘教えちゃいけないっていう法律でもあるの?
0218デフォルトの名無しさんNGNG
偽証罪に問われるよ
0219デフォルトの名無しさんNGNG
へえw
0220デフォルトの名無しさんNGNG
なんでiteratorとreverse_iteratorって同一の抽象クラスを持ってないのかな
0221デフォルトの名無しさんNGNG
Effective STL
0222デフォルトの名無しさんNGNG
を見ろ。
0223デフォルトの名無しさんNGNG
っていうのは冗談。
0224デフォルトの名無しさんNGNG
なんちゃって。
0225デフォルトの名無しさんNGNG
ごめん
0226デフォルトの名無しさんNGNG
>>218
恥ずかしい奴だなあ。偽証罪って裁判所内でしか関係ないぞ。
0227デフォルトの名無しさんNGNG
ネタニマジレスハズカシイ
0228デフォルトの名無しさんNGNG
ネタがつまらなすぎる
0229デフォルトの名無しさんNGNG
>>228
必死すぎ
0230デフォルトの名無しさんNGNG
>>226
国会に証人喚問された人も。
0231デフォルトの名無しさんNGNG
>>230
全くの板違いだが気になったので。

国会の証人喚問は法廷並みの扱いなので
ここでの嘘は偽証罪に問われる。

疑惑の政治家が証人喚問に呼ばれるのは
「記者会見で言ったことがここでも言える?
嘘だったら警察に捕まるよ〜ん」ってこと。
0232デフォルトの名無しさんNGNG
>>231
その話がSTLとどういう関係があるのか?
0233デフォルトの名無しさんNGNG
>>231
キーワードわかってんだからググれば?
0234デフォルトの名無しさんNGNG
1引数ファンクタを0引数ファンクタに落とすクラスは標準にないでしょうか?
2引数を1引数にするにはbind1stとかを使えばいいのですが。
別に自作してもたいした手間ではないのですがなんか・・・
0235デフォルトの名無しさんNGNG
>>234
ない。
0236デフォルトの名無しさんNGNG
自作してもたいした手間ではないものほど標準であって欲しい
0237235NGNG
>>234
ごめん。
クラスね。unary_functionがある。でも、生成関数はない。
0238デフォルトの名無しさんNGNG
非標準ならboost::bind,boost::lambda::bindとかが使えるかな.
あ,でもここSTLスレだった・・・.
0239デフォルトの名無しさんNGNG
unary_functionとbiary_functionの型パラメータは
なんで最後が戻り値の型なんでしょう

最初にあった方が直感的だと思うけど・・・
0240デフォルトの名無しさんNGNG
仕様決めた人間に聞け
0241デフォルトの名無しさんNGNG
>>239
俺もそう思た
確かLokiでは最初に戻値型があったような
0242デフォルトの名無しさんNGNG
センスがなかったんだな。きっと。
0243今度はな、名前が…NGNG
そこでキーワード引数ですよ。
0244デフォルトの名無しさんNGNG
そこで、じゃないだろ
もともと順序性あるのにわざわざキーワードにマップする意味なし
0245デフォルトの名無しさんNGNG
順序性あるか?
たまたまC++の構文がそうなっているだけのような気がするが。
0246デフォルトの名無しさんNGNG
見た目の順序のことを言っているだけだが?
0247デフォルトの名無しさんNGNG
だけだが?
0248デフォルトの名無しさんNGNG
けだが?
0249デフォルトの名無しさんNGNG
だが?
0250デフォルトの名無しさんNGNG
ガッ!
0251デフォルトの名無しさんNGNG
const char dakedaga[] = "だけだが?";
for (int i = 0; i < 3; ++i)
  std::cout << dakedaga + 247 + 2 * i << std::endl;
0252デフォルトの名無しさんNGNG
std::vector<int> vecint;
のすべての要素と和はかっこよくかけませんかね?
forで回すのは無しねw
0253デフォルトの名無しさんNGNG
int total = std::accumulate(vecint.begin(), vecint.end(), 0);
0254デフォルトの名無しさんNGNG
struct sum
{
  int m_sum;
  sum() : m_sum(0) {}
  void operator()(int n)
  {
    m_sum += n;
  }
};
として

{
  sum s;
  std::for_each(vecint.begin(), vecint.end(), s);
  std::cout << "合計:" << s.m_sum;
}

これでどうや?
0255デフォルトの名無しさんNGNG
>>253
>>254
ありがとうございます。
どちらもC++らしいかっこいいとおもいます。
ですが、>>254さんのはちょっと内容が僕にはヘビーなんで>>253さんので以降と思います。

ありがとうございました
0256デフォルトの名無しさんNGNG
一冊でもまともな本を持ってたら
そのまんまの記述が見つかるレベルだぞこれ。
ちゃんと本買ったほうがいいんじゃねえか?
0257デフォルトの名無しさんNGNG
>>255
boostでは無名関数が定義されていますので、こういうこともできますよ
int sum = 0;
std::for_each(data.begin(), data.end(), (sum += boost::lambda::_1) );
0258デフォルトの名無しさんNGNG
>>257 スレ違い。
0259デフォルトの名無しさんNGNG
>>258
確かにスレ違いだけど、STLを使っている人の中にはBOOSTを使う用意の
ある人も多いのではないかと思っている。
そういった人が、STLではこうしているがもっとスマートにはならないだろうか、
と考えた時、BOOSTの中にある選択肢を"たまたま"知らなかったとしたらBOOSTスレ
にそれを聞きに行くだろうか。
知らないものは、聞きにはいかない。
ここでキーワードを教えるくらいは良いと思うけれどね。
0260デフォルトの名無しさんNGNG
てかC++スレ分割しすぎ
0261デフォルトの名無しさんNGNG
>>260
C++は分割して作業しやすいように出来ているからね。
0262デフォルトの名無しさんNGNG
>>257
無名関数ですか、perlっぽいすがまた、激しくカコイイですね
未だにCライクにループで回す癖が抜けませんw
0263デフォルトの名無しさんNGNG
>>262
もともとはLispのlambda式なんだけどね。
BOOSTのlambdaはちょっと違和感があるけれど。。。
0264デフォルトの名無しさんNGNG
>>259
すれ違いで悪いんですが、Delphiでの解決方法教えてください
0265デフォルトの名無しさんNGNG
>>264
257はありだろうけど
さすがにそれはDelphiスレで聞くべきだよ
(本当に知りたければね)
0266デフォルトの名無しさんNGNG
>>259
アホは放置しろ。
0267デフォルトの名無しさんNGNG
そういえば結局、次期標準でBoostから採用されるものって何なんだ?
0268デフォルトの名無しさんNGNG
>>267
ttp://jbbs.livedoor.jp/bbs/read.cgi/computer/5651/1048584601/88
0269デフォルトの名無しさんNGNG
日本語読めないの
0270268NGNG
>>269
スマン寝てないの
0271デフォルトの名無しさんNGNG
>>267
function, tuple, type_traits, regex, mem_fn, shared_ptr, ref, bind
0272デフォルトの名無しさんNGNG
とりあえずofficial wishlist置いときますね
http://lafstern.org/matt/wishlist.html
0273デフォルトの名無しさんNGNG
STLportにバグが見つかったそうな。
0274デフォルトの名無しさんNGNG
>>273
('A`) マジデ?
0275デフォルトの名無しさんNGNG
いっぱいあるだろそんなもん。
0276デフォルトの名無しさんNGNG
STLPortなんてどうして使うの?
0277デフォルトの名無しさんNGNG
>>276
付属stlがくそだからじゃないか?
0278デフォルトの名無しさんNGNG
STLSoftもつかおーぜ
0279デフォルトの名無しさんNGNG
>>278
そんな怪しい名前のソフトは使いたくねーなw
0280デフォルトの名無しさんNGNG
>274
多分これ。
ttp://www.freeml.com/message/[email protected]/0011266
0281デフォルトの名無しさんNGNG
std::map<std::string,int> Map;

Map.insert(std::pair<std::string,int>(std::string(""),1));
            ~~~~~~~~~~~~~~~
の部分をハードコーディングではなく書けませんか?
0282デフォルトの名無しさんNGNG
typedef std::map<std::string,int> OrenoMap;
typedef std::pair<std::string,int> OrenoPair;

OrenoMap Map;

Map.insert(OrenoPair(std::string(""),1));
0283デフォルトの名無しさんNGNG
>>281
typedef std::pair<std::string,int> hoge;
0284デフォルトの名無しさんNGNG
う゛ぁぅえ_tyぺ
0285デフォルトの名無しさんNGNG
>>281
std::pair<>(std::string(""), 1)
ってこと?
0286デフォルトの名無しさんNGNG
>>285
それOKなんですか?
0287デフォルトの名無しさんNGNG
Map[""] = 1;
0288デフォルトの名無しさんNGNG
>>286
ダメだからmake_pairってのが用意されてたりする
0289デフォルトの名無しさんNGNG
>>281
Map.insert(std::make_pair(std::string(""), 1));

古いコンパイラだと受け付けないのもあるかもしれませんが・・・.
0290デフォルトの名無しさんNGNG
typedef std::map<std::string,int> MapT;

MapT m;
m.insert(MapT::value_type(std::string(""),1));
0291デフォルトの名無しさんNGNG
m.insert(MapT::value_type("",1));
でもOK
0292デフォルトの名無しさんNGNG
そんな面倒なことせんでも>>287でOKだろ。
0293デフォルトの名無しさんNGNG
こうr
0294デフォルトの名無しさんNGNG
>>292
意味が違うし
0295デフォルトの名無しさんNGNG
>>294
詳しく
0296デフォルトの名無しさんNGNG
map::insertはkeyが既存の場合,値が変更されません.
287さんのはkeyが既存のものも変更されます.
あと,細かいところだと293さんが書かれているの(効率)もあります.
0297rubykitchNGNG
全部EffectiveSTLの受け売りですねぷぷううううううううううううううううううううううううううううう
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>C++
0298デフォルトの名無しさんNGNG
SuperRubyistはEffectiveSTLまで読んだのか
0299デフォルトの名無しさんNGNG
SuperRubyisは勉強熱心だね。
0300デフォルトの名無しさんNGNG
vector <string> temp;

ってやっちゃっていいのでしょうか?
なんかVC6だと警告でるのですが・・・。
0301デフォルトの名無しさんNGNG
>>300
警告の内容も晒さずに人様の貴重な時間を浪費して良くそんなことが聞けるな。
0302Ruby!!!!!!!!!!!!!!!NGNG
vc6は窓から投げ捨てろ
0303デフォルトの名無しさんNGNG
>>300
それは無害です。

E:\Project\Test755\Test755.cpp(16) : warning C4786: 'std::reverse_iterator<......'
: 識別子が '255' 文字に切り捨てられました (debug 情報内)。
0304デフォルトの名無しさんNGNG
>>301
もうしわけありませんでした。
って、調べてみたら解決しました。

どうやらVCのコンパイラが対応していないだけってことだったらしいです。

#pragma warning(disable:4786)

っというように追加して、みんなやってるようです。
0305デフォルトの名無しさんNGNG
>>303
レスありがとうございました。
0306デフォルトの名無しさんNGNG
今更だけど、std::mapより素直に力技のstd::vectorの検索を実装しといた方が柔軟な仕様変更に強いね。
メモリ消費量も断片化しないからstd::vetorは捨てたものじゃない。
当初の予想以上に作り込む必要が出てきたときstd::mapは厳しいね、いろんな意味で。
0307デフォルトの名無しさんNGNG
おいおい…
お前の設計段階での抽象化が甘いだけだよ。
0308デフォルトの名無しさんNGNG
>>306
力技の実装が素直なわけないだろ。
「仕様変更に強い」ではなくて、
たまたま実装に都合のいい仕様変更がはいっただけじゃないのか?

特殊なケースを一般的であるかのように言うのは感心できない。
0309デフォルトの名無しさんNGNG
そもそもvectorを代わりに使うならmapじゃなくてmultisetになりそうなもんだが
0310デフォルトの名無しさんNGNG
>>309 どっちでもいけるだろ。
0311デフォルトの名無しさんNGNG
map<T1, T2>をvector<pair<T1, T2> >にしたのかもしれん
0312デフォルトの名無しさんNGNG
>>311
その通りですが、なにか?
0313306NGNG
コンテナ要素が複雑であった場合は結局、諸々の検索方法を実装しなければならず、
std::mapのキー検索の存在感が、かすむ、かすむ。
みんなはどうしてるわけ?mapにおけるキー以外の検索。
0314デフォルトの名無しさんNGNG
>>313
boost::multi_index

ってのはもうちょっと先の話だが、
キー以外の検索があるのなら map に不満が出るのはあたりまえ。
最初っからそう言えよ。
0315デフォルトの名無しさんNGNG
普通に考えて、set<自分で作ったクラス>、だろ。
他に選択肢がありえる理由がわからん。
0316デフォルトの名無しさんNGNG
>>315
less でソートされてる必要は無いから set で保持するのは無駄だろ。
0317デフォルトの名無しさんNGNG
std::vectorで済むものはそうしているし、
駄目なものは他のものを使っている。例えば赤黒木。
いずれにせよ、検索のための"algorithm"をstd::vector専用に書いたりはしない。
0318デフォルトの名無しさんNGNG
>>316
いつも無駄なわけじゃないだろ?
0319306NGNG
>>315
std::setはメモリ消費量が大きいです。無駄多し。vector<list<setです。VC6,VC7で確認済み。
メモリを一括確保できるstd::vector::reserve()がある限り、std::vector最強だと思います。
ちなみに要素をswapしたい場合などは配列を直接移動させることは避けて
これまたポインタ配列やポインタリストを用意して順序付けするようにしてますが。
std::setは論外です。std::setは柔軟性の点で劣るかと。重み付けがかえって邪魔になる事多し。
0320デフォルトの名無しさんNGNG
ねぇ、おまいらSTLとかなんかよりまずは
C++を勉強してこい、話はそれからだな
0321デフォルトの名無しさんNGNG
>>319
ひょっとして、検索が主な用途じゃないのか?
0322デフォルトの名無しさんNGNG
>>319
なんで初めにmapを使ったのか、理由を教えて。
0323デフォルトの名無しさんNGNG
>>319
メモリ消費量の大きさが「無駄」になるかどうかは使う場面ごとに違うだろ。
reserve するためには要素数に対する前提が必要だろ。

繰り返すが、
特殊なケースを一般的であるかのように言うのは感心できない。
0324306NGNG
>>322
実は、自分のPCに数十万のファイルがあってファイルを探すのが面倒なので
ファイル名だけでフルパス名を取得できる仕組みを作ってたのですが、
ファイル名をキーにして、ファイルのフルパス名・その他情報を値としてstd::mapを構成していたのですが、
色気を出してワイルドカード検索できるようにしようとした時点でstd::mapによる設計が形骸化しました。
現在そのプログラムはバックグラウンドで動かすサーバ形式をとっているのですが、
ファイルが数十万なので常駐メモリが100MBを超えています。(※意図的なものです。)
ギガクラスのメモリを乗せる時代に見合ったファイルインデックスシステムがあってもいいかな、と。
ゲームやVMでしかメモリをフル稼働しないのは勿体ない気がしたこともありまして。
0325デフォルトの名無しさんNGNG
setでinsertしまくると遅い事に気づいたんだけどうまい方法無い?
挿入するまとまりを、
vectorに一旦入れてからset.insert(vec.begin(), vec.end())みたいな感じで
まるごとinsertしてみたけど意味無かった。
0326デフォルトの名無しさんNGNG
[cppll:5647] ソート済みベクタは遅い?
これ見てからはもっぱらソース済みvectorは使わなくなったな。
0327デフォルトの名無しさんNGNG
>>324
おもいっきり>>307-308じゃんかw
0328デフォルトの名無しさんNGNG
>>323
自分の経験則からいくと、vector::reserveの冗長性を織り込んだメモリ消費量より、
std::listやstd::set,std::mapのメモリ断片化によるメモリ消費量の肥大化の方が厄介でした。
多くの場合、要素数のおおよその数が分かっているので、したがってvectorが最適である可能性が高い。
しかも、そのサイズに関する最適化の効果を確実に得られるのもvectorの特徴。
他のコンテナではPGによる最適化の手段が限られている。
0329デフォルトの名無しさんNGNG
>要素数のおおよその数
予想も付かない場合が多い。
0330デフォルトの名無しさんNGNG
vectorはPGが要素数を教えて上げないと極端に遅くなるか
極端にメモリが無駄になるかのどちらかになるから。

vector以外のコンテナはそんな事は無い。
0331デフォルトの名無しさんNGNG
つかそこまでいったらUNIX DBとかsqliteぐらい使えよ。
0332デフォルトの名無しさんNGNG
>>328
要素数が多くて、さらに、その数が予め解かってる場合は、
vectorがいいですね、そうですね、そうですよ。
0333デフォルトの名無しさんNGNG
>>329
さっきからstd::setを賞賛する痛い人と同一人物ですか?
同一人物でしたら残念ですが同意できません。
別人でしたら同意します。やっぱこういうのは、ケースバイケースですから。
0334デフォルトの名無しさんNGNG
>>326
ソース済みvector(・∀・)イイ!
0335デフォルトの名無しさんNGNG
>>333
ハゲワラタ
0336デフォルトの名無しさんNGNG
>>333
setを薦めてるレスは>>315だけじゃない?
それも要素数の話が出る前の検索用コンテナの話題で。
0337デフォルトの名無しさんNGNG
俺も306なら不同意だけど、他なら同意だ。
ケースバイケースだからな。
0338306NGNG
ぶっちゃけ、>>324で述べた仕様が、
Unixにおけるlocate・slocateコマンドをメモリ常駐バージョン化して毛が生えた
他愛のないものであることは十分承知してます。でも作ってしまったものはしょうがない。orz
0339デフォルトの名無しさんNGNG
検索するインデックスキーがある程度決まってる場合は
setがいいよ。

[cppll:5687]から転載
3000ms - set<int> set::lower_bound
3203ms - set<int> set::find
4188ms - vector<int> lower_bound
4547ms - vector<int> binary_search
4719ms - vector<int> equal_range
5109ms - set<int> set::count

VC7+付属STL 要素数1000 ヒット率50% ループ回数 1千万
10125ms - set<string> set::find
11265ms - set<string> set::lower_bound
13250ms - vector<string> binary_search
15078ms - vector<string> lower_bound
17297ms - set<string> set::count
17328ms - vector<string> equal_range

検索するインデックスキーが全然決まってない場合は
要素数が分かってる場合…vector
分からない場合…deque
がいいよ。
0340デフォルトの名無しさんNGNG
やっぱ言葉足らずな人が出ると盛り上がるな。
0341デフォルトの名無しさんNGNG
>>328
vector は reserve が使える。それだけ憶えとけば十分。
そんな経験則、実際の判断に勘定するべきではない。

> メモリ断片化によるメモリ消費量の肥大化
ほんとで「断片化」が原因だったのか、怪しい言い回しだな。
0342デフォルトの名無しさんNGNG
邪道だが、std::vectorをqsort()でソートすると効率が大幅に改善するから使ってる。
qsort(&v[0], v.size(), sizeof(v::reference_type), comp_func);


というか、なぜvector::sort()はあんなに遅いのだろうか・・・。
vector::stable_sort()は現在順序を反映してくれるので許せるが。
0343デフォルトの名無しさんNGNG
STLにvector::sort()なんて存在しません
0344342NGNG
>>343
失礼。訂正。

vector::sort() → std::sort()
vector::stable_sort() → std::stable_sort()
0345デフォルトの名無しさんNGNG
Celeron 1GHz, mem 256MB, VC++7.1で実験
int 1000000個を持ったvectorのソート

最適化なし qsort 1.9s sort 6.2s
最適化あり qsort 1.1s sort 0.8s

最適化してなかったとかいうオチだったらヌッコロス
0346デフォルトの名無しさんNGNG
>>345
ちゃんと文字列を入れたstringで試してみ
0347デフォルトの名無しさんNGNG
>>345
intでやってみた。
ソースは
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=250
環境AthlonXP3000+、PC2700 1GB、XPSP1

vector algorithm sort = 5198079
vector qsort = 8201075
vector stable sort = 9188932

vectorの中身によって大幅に変わる。
0348デフォルトの名無しさんNGNG
おまいら部分ソートってのしらないの?
0349デフォルトの名無しさんNGNG
なんで部分ソートが出てくるの?
0350デフォルトの名無しさんNGNG
partial_sort()を使ってどうする。この場合。
0351デフォルトの名無しさんNGNG
某スレで出たstringでの比較用コード

#include <stdlib.h>
#include <stdio.h>
#include <algorithm>
#include <windows.h>
#include <string>
int compare(const void* a, const void* b) { return strcmp(((std::string*)a)->c_str(), ((std::string*)b)->c_str()); }
struct Compare :
public std::binary_function<const std::string&, const std::string&, bool>
{
inline bool operator ()(const std::string& a, const std::string& b) const
{ return strcmp(a.c_str(), b.c_str()) < 0; }
};
const int ssize = 1000000;
main()
{
std::string *s = new std::string[ssize];
for(int i=0;i<ssize;i++)
{
for(int i=0;i<16;i++)
{
s[i] += char(rand() % 26 + 'a');
}
}
DWORD t = GetTickCount();
//qsort(s, ssize, sizeof(std::string), compare);
//std::sort(s, s+ssize, Compare())
std::sort(s, s+ssize);
printf("%dms\n", GetTickCount()-t);
delete[] s;
}
0352デフォルトの名無しさんNGNG
>>351
VC++7.1 -O2 -GX
qsort
201ms
std::sort(Compare())
511ms
std::sort
481ms
0353デフォルトの名無しさんNGNG
>>351
for(int i=0;i<16;i++)
はjにしなきゃ。
0354デフォルトの名無しさんNGNG
>>351
std::sort()の方はコンストラクタ・デストラクタ・コピーコンストラクタ・代入演算子
が頻繁に使われてしまうから、これではまともな比較ができん。
0355デフォルトの名無しさんNGNG
jに直した物
VC++7.1 -O2 -GX
qsort
4256ms
std::sort(Compare())
5116ms
std::sort
6960ms
0356デフォルトの名無しさんNGNG
>>354
どう直したらまともな比較になるの?
0357デフォルトの名無しさんNGNG
std::sortって
コンストラクタ・デストラクタ・コピーコンストラクタ・代入演算子を
定義し直さないといけないのか。
使うの面倒だな
0358デフォルトの名無しさんNGNG
std::stringにはswap()メンバ関数があるから、それを活用して特殊化した
sort()が必要そうだな。どちらにしろqsort()は動かない処理系はまずない
だろうが、危険な香りがプンプンする。
0359デフォルトの名無しさんNGNG
いや,stringに対して自由関数のswapが特殊化されているのは
標準で明記されていますよ.だから,sortはこのswapを使うはず.
なので,上のようなoverheadの由来がよく分かりません.
どこに原因があるのか知りたいです.(sortの実装詳細?)
0360デフォルトの名無しさんNGNG
>>359
標準のstd::sort()はstd::stringに対してswapを使うと明記されてるの?
初耳だが。STLport4.6.2を調べてみたが、特殊化されている気配はない。
std::stringの場合はsort()を自作した方がいいんじゃないの?そんなに
速度の低下が気になるなら。
0361デフォルトの名無しさんNGNG
組込型をソートするならstd::sort
クラス・構造体をソートする時はqsort
と使い分けるのが良さそうだな。
0362デフォルトの名無しさんNGNG
Effective STLは嘘つきだな
0363デフォルトの名無しさんNGNG
>>362
何項が怪しいと思うんだ?ちなみに聞いてみるが。
0364デフォルトの名無しさんNGNG
読み直してみたら可能性が高いとかいう書き方で逃げてやがった
0365デフォルトの名無しさんNGNG
>>355はVC7.1に附属しているDinkumwareのSTLを使っているのか。
STLport4.6.2で実行してみるとご覧の通りの結果になった。
環境AthlonXP3000+、PC2700 1GB、XPSP1
VC7.1+STLport4.6.2(Buildモード)

qsort
63ms
std::sort(Compare())
1203ms
std::sort
1562ms

もしかしたらDinkumwareの方はswap()を使って特殊化しているのかも
知れないな。qsort()があまりに速すぎる。
0366デフォルトの名無しさんNGNG
std::sortは
特定のクラス専用に作られた swap 関数 (例えば inline
void swap( Foo& a, Foo &b);) を使ってくれないんですか?
0367デフォルトの名無しさんNGNG
>>366
残念ながらテンプレート・パラメータとしてswap関数を与えるバージョンは
標準にはない。君が作ってくれ。
0368デフォルトの名無しさんNGNG
>>366
CodeWarrior付属のSTLはちゃんと使う。std::stringを扱う場合も
インライン展開されるstd::sortの方がqsortよりずっと速い。
std::sortが遅いのはVC++処理系固有の問題、御愁傷様
0369デフォルトの名無しさんNGNG
>351
qsortは一回の比較につきless, eq, greaterの情報を取得できるのに、
std::sortだとlessとgeqの情報しか取得できないじゃん。
にも関わらずstrcmp()使ってるから比較にかかる時間は同じ。
こんなファンクタ書かれたら明らかにstd::sortが遅くなるに決まってる。
0370デフォルトの名無しさんNGNG
>>369
( ゚Д゚)ハァ?
0371デフォルトの名無しさんNGNG
>>369
stable sortなら算術比較が有効な場合もあるけどなあ。
0372デフォルトの名無しさんNGNG
string に qsort って、未定義だろ。
string::swap() は規格に載ってる。
sort が swap 使っていいかどうかは不明。
0373デフォルトの名無しさんNGNG
stringをmemcpy(3)しちゃうわけだもんね。
0374デフォルトの名無しさんNGNG
>>372
stringにqsortして動かなくなる実装があったら教えて
0375デフォルトの名無しさんNGNG
>>368
gcc3.3.4
gcc3.4.2
bcc5.6.4
で試したら全部qsortの方が速かったよ。
0376デフォルトの名無しさんNGNG
結論…CodeWarriorは最強
0377デフォルトの名無しさんNGNG
g++(mingw) 3.3.3 -O2
qsort
4336ms
std::sort(Compare())
7000ms
std::sort
7631ms
0378デフォルトの名無しさんNGNG
bcc32 5.6.4 -O2
(元スレから拾ってきた)
qsort:1963ms
std::sort(Compare()):2673ms
std::sort:3395ms
0379デフォルトの名無しさんNGNG
CodeWarriorには全米が泣いた
0380デフォルトの名無しさんNGNG
mingw - g++ 3.4.2 -O2 @ AMD Duron1.2GHz

qsort 50ms
std::sort(Compare()) 1713ms
std::sort 2053ms

qsort速いね..
0381デフォルトの名無しさんNGNG
私のおじいさんが教えてくれた、初めてのC++言語実装。
それはCodeWarriorで、私は4歳でした。
その味は甘くてクリーミーで、こんな素晴らしい実装を教えてもらえる私は、
きっと特別な存在なのだと感じました。
今では、私がおじいさん。
孫に教えてあげるのは、もちろんCodeWarrior。
なぜなら、彼もまた特別な存在だからです。
0382デフォルトの名無しさんNGNG
>>378
BCCのqsortそんなに遅かったか?

BCC5.6.4 -O2 -vi
AthlonXP3000+ 1GB XPSP1
qsort:78ms
std::sort(Compare()):1218ms
std::sort:1437ms
0383デフォルトの名無しさんNGNG
これは交換を行う演算子があったほうがよかったかもしれんね。
swap関数では言語的に統制されたインターフェースとしては弱い。

int a, b;
a @= b; // aとbを交換するトカ
0384デフォルトの名無しさんNGNG
a <=> bの方が直感的
0385デフォルトの名無しさんNGNG
ヌッコロされるべきは>>345だったというオチか。
セレロンユーザの分際で粋がるとああなるっていう典型だな(藁
0386デフォルトの名無しさんNGNG
>>345 晒しあげw
セレロン使いのおこちゃまが夜更かししちゃ駄目だぞ。
0387デフォルトの名無しさんNGNG
漏れは鱈セレ使いと河童セレ使いは違いの分かる香具師だと信じている。
藁セレ使いはアフォ北森以降セレ使いは貧乏
0388380NGNG
当方 gcc(g++) ですが <algorithm> からたどってヘッダを見てみたら

inline void iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b)
 〜 中略 〜
 const _ValueType1 __tmp = *__a; ←ココ
 *__a = *__b; ←ココ
 *__b = __tmp; ←ココ

(!? 直接代入してるよ!)ここを swap( *__a, *__b); に変えてみたら
std::string で定義されてる inline void swap( string &... が利いたのか、

std::sort(変更前) 2033ms
std::sort(変更後) 1312ms へと

高速になりました。swap( *__a, *__b) では何かまずいんでしょうか…?ただのバグ?
0389デフォルトの名無しさんNGNG
結果がおかしくなるわけじゃないんだからバグではないだろう
0390デフォルトの名無しさんNGNG
bcc5.6.4とかで標準のstlportでは
初めから
// swap and iter_swap
template <class _Tp>
inline void swap(_Tp& __a, _Tp& __b) {
_Tp __tmp = __a;
__a = __b;
__b = __tmp;
}

template <class _ForwardIter1, class _ForwardIter2>
inline void iter_swap(_ForwardIter1 __i1, _ForwardIter2 __i2) {
swap(*__i1, *__i2);
}

となっている
0391デフォルトの名無しさんNGNG
>>390
VC++7.1のDinkumwareもそうなってる
0392デフォルトの名無しさんNGNG
GNU側のミスっぽいな
0393デフォルトの名無しさんNGNG
それでも結局qsortの方が全然速いのでした。

                         −完−
0394デフォルトの名無しさんNGNG
STLスレに来てるんだから遅くったってstd::sort使えよ。
ビヤーンが泣くぞ
0395デフォルトの名無しさんNGNG
qsortのqは速いって意味だ。
ただのsortより速いに決まっているであろう
0396デフォルトの名無しさんNGNG
qsortより速いCodeWarriorはネ申だな。どうなってるのやら。
0397デフォルトの名無しさんNGNG
2010年にはC++の実装はCodeWarriorしか残ってないかもな
0398デフォルトの名無しさんNGNG
これはもうCodeWarriorの単独スレ立てるしか無いな
0399デフォルトの名無しさんNGNG
CodeWarriorのヘッダソースだけもらってきて(以下ry
0400デフォルトの名無しさんNGNG
同じソースコードから各開発環境で生成した実行ファイルを同一OS・同一PC上で比較しなければだめでしょ。
CodeWarriorの最適化が甘いという落とし穴がないとは限らない。
どうするよ?CodeWarriorのqsortがVC7.1のstd::sortに負けてたら。

そんなわけで、CodeWarriorとVC7.1両方使えるユーザは同じコードを使ってVC7.1バージョンと比較してみて。
0401デフォルトの名無しさんNGNG
>>388
CVSでは修正されたみたいだ。
詳細は http://gcc.gnu.org/ml/libstdc++/2004-08/msg00167.html
0402デフォルトの名無しさんNGNG
仕様の話しよう
0403デフォルトの名無しさんNGNG
qsortが極端に遅くなるサンプル。
(マイクロソフト、ボーランドのコンパイラでは確認したが他のコンパイラでは
試していない。)

#include <stdlib.h>
#include <stdio.h>
#include <algorithm>
#include <windows.h>
int mycmp(const void* a,const void* b){ return *(int*)a-*(int*)b; }
int main()
{
int i,k,*a;
printf("k="); scanf("%d",&k);
a=new int[4*k];
for(i=0;i<k;i++){
a[2*i]=2*i+1;
a[2*i+1]=2*k+2*i+1;
a[2*k+i]=2*i+2;
a[3*k+i]=2*k+2*i+2;
}
DWORD t = GetTickCount();
qsort(a, 4*k, sizeof(int), mycmp);
//std::sort(a,a+4*k);
printf("%dms\n", GetTickCount()-t);
delete[] a;
return 0;
}
0404デフォルトの名無しさんNGNG
>>403
クイックソートに不向きな順序付けの実装ですね。
ただ、今争点になっているのはコンテナのswap()のコストに関してなので、少し違うかも。
0405デフォルトの名無しさんNGNG
このスレには司会者がいたのですね。
なかなか格調高いスレですね。
0406デフォルトの名無しさんNGNG
>>400
両方使えるが、どのソースを使ったらいいんだい?
0407デフォルトの名無しさんNGNG
てか>>361みたいな感じで使い分ければいくない?
0408デフォルトの名無しさんNGNG
>>351 のコード(jに直したver)
ただし、コンパイルエラーが出たからmain()の戻り値にintを
指定してあるのと、#include <functional>を追加してある。

Metrowerks CodeWarrior 8.2 Pro オプション:最大(スピード優先)
qsort           5282ms
std::sort(Compare()) 1922ms
std::sort         3109ms

MS cl ver 13.10.3077        オプション:-O2 -GX
qsort           2296ms
std::sort(Compare()) 2312ms
std::sort         3703ms
0409デフォルトの名無しさんNGNG
やっぱCodeWarriorのqsortが遅いだけというオチだったな。
0410デフォルトの名無しさんNGNG
CodeWarriorのstd::sort(Compare())なかなか早いね。
MS clもstlportを使えばもっと早くなるんじゃないかな。
0411デフォルトの名無しさんNGNG
Metrowerks Template Libraryのqsort.cより
*Implementation
*--------------
*Here we use Heapsort, after Knuth's "The Art of Computer Programming, Vol. 3",
*Section 5.2.3. Heapsort was chosen because it requires no auxiliary storage and
*has excellent average *and* worst-case performance.
0412デフォルトの名無しさんNGNG
今日、久しぶりに部屋の掃除をしたらウジの死骸を
見つけた。どうりで最近子バエがよく飛んでると思った。
その話を踏まえて
例え時間が最短でも楽をすると痛い目に会うということだね。
0413デフォルトの名無しさんNGNG
>>412
スレ違い氏ね
0414デフォルトの名無しさんNGNG
>>413
「氏(うじ)ね」?
0415デフォルトの名無しさんNGNG
あーはいはいうまいうまい

↓次の方どーぞー
0416デフォルトの名無しさんNGNG
ふいんき同然のバカ出現。
0417デフォルトの名無しさんNGNG
しゅみれーしょん
0418デフォルトの名無しさんNGNG
ちょいと質問です

vectorなどのコンテナを利用し、
サイズの大きい構造体(Hoge)を動的にデータを格納する場合
vector<Hoge> よりも vector<Hoge*> の方がオーバーヘッドが少ないと聞きました

で、実際その方法でやってみたわけなんですが、
この方法だと結局自分でメモリ確保して解放する手間が出てきて
コンテナ利用する利点が失われるのでは、と思ったわけで…

本当にオーバーヘッドが大きいのでしょうか?
それとこの方法で、コンテナを利用するのはごく普通なことなんでしょうか?

auto_ptr 使えとかは無しでお願いします
0419デフォルトの名無しさんNGNG
てか自分でベンチ取ればいいじゃん。
0420デフォルトの名無しさんNGNG
>>418
vector<Hoge> → vector<Hoge*>

+ 要素の追加時に起こる O(n) のコピーが軽い
これは明らかな利点。
「オーバーヘッド」とか言ってる奴はたぶんこれを指してる。

- 寿命管理の必要がある
shared_ptr 使えば回避できる。
ただし、その場合は一つ目の利点を再検証してみたほうがいいだろう。

- アクセス速度はほとんど変わらないだろうが、厳密には遅くなっている
よっぽどシビアな環境でなければ無視してかまわないはず。

? 要素それぞれでメモリ確保するので使用メモリが増える可能性がある(減る可能性もある)
もともと Hoge のサイズが大きいなら、これも無視できるかも。
0421デフォルトの名無しさんNGNG
ポインタだと間接参照になるから
vectorの恩恵(メモリ上で連続しているためアクセス速度が速い)が受けられない。
0422デフォルトの名無しさんNGNG
>>418
> vectorなどのコンテナを利用し、
> サイズの大きい構造体(Hoge)を動的にデータを格納する場合
> vector<Hoge> よりも vector<Hoge*> の方がオーバーヘッドが少ないと聞きました

言っている意味を説明しろ。>オバーヘッド
0423デフォルトの名無しさんNGNG
vector<T*>だとポインタサイズ×要素数メモリ消費が増えるね。
0424デフォルトの名無しさんNGNG

>+ 要素の追加時に起こる O(n) のコピーが軽い
>これは明らかな利点。
>「オーバーヘッド」とか言ってる奴はたぶんこれを指してる。

何この人RVOも知らないの?
0425デフォルトの名無しさんNGNG
実データとポインタ配列を両方とも併用するという発想はでてこないのだろうか?
いつから二者択一するという前提になったのだろう?
0426デフォルトの名無しさんNGNG
>>424
capacity超えて再確保し直す時の話じゃないの?
0427デフォルトの名無しさんNGNG
>>425
空気嫁
0428デフォルトの名無しさんNGNG
RVOが関係するのか。
俺のC++理解度もまだまだだなぁ(pgr
0429デフォルトの名無しさんNGNG
>>424
どこに Return Value Optimization の出番が?
0430デフォルトの名無しさんNGNG
>>429
424はまったく話が理解できてないだけだよ。
0431デフォルトの名無しさんNGNG
つまり Hoge* でコンテナを作れば、
コンテナ数の増減やコンテナのコピーは早いが、
実データにアクセスするにはロスが生じる

という解釈でよろしいでしょうか?
結局、Hoge で行った方がいいみたいですね

いろいろ返答ありがとうございました
0432425NGNG
>>427
お前こそ空気読め。
0433デフォルトの名無しさんNGNG
よほどクリティカルでなければHogeでいいんじゃない
クリチカルなら面倒なことに手を入れなきゃなんないだろうけど
0434デフォルトの名無しさんNGNG
>>431
>実データにアクセスするにはロスが生じる

・・・文章ちゃんと読めてる?
0435デフォルトの名無しさんNGNG
>>434
>>420 >- アクセス速度はほとんど変わらないだろうが、厳密には遅くなっている
>>421
からそう解釈しましたが、違いますか?
0436デフォルトの名無しさんNGNG
結局>>425はスルーされてる訳だが w
0437デフォルトの名無しさんNGNG
>>435
もう一行下は読んだのか?
0438デフォルトの名無しさんNGNG
ま、知ったかぶりの>>421が諸悪の根源なわけだが。
>>421は悪意をもった初心者だ。気をつけろ。
0439デフォルトの名無しさんNGNG
>>421がC/C++歴半年以下なら回答者を偽装したアフォとして許すが、
半年以上でかつシラフなのであればPGをやめるべきだろう。
だれか肩たたいてやれ。
0440デフォルトの名無しさんNGNG
でかいvectorをiteratorで叩くなら、
>>421の言っていることも嘘ではないぜ?
0441デフォルトの名無しさんNGNG
>>440
「iteratorで叩く」とはどういう意味?
初めて聞いた。英語だとどう表現するの?
0442デフォルトの名無しさんNGNG
演算子つくるのめんどいのでノータイムでnoncopyable&shared_ptr
0443デフォルトの名無しさんNGNG
パフォーマンスの話は一般論が出たとこで終わり。
きちんと計測してから出直して来い。
0444デフォルトの名無しさんNGNG
std::sortにstd::stringを適用した場合qsort()よりも遅くなる事にどうしても
納得できず、自分でクイックソート関数を起こしてみた。

ソース
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=321
環境
AthlonXP3000+、PC2700 1GB、XPSP1、VC7.1(Release)
結果
1703ms // 自前qsort版
4953ms // 通常版
2656ms // swap版

swap()を使えばコピーコンストラクタなどの副作用を最小限に抑える事が
できるので、速度が向上したと思われる。しかしmemcpyを使う版にはどうし
てもかなわない。

結論を言うと、stringの中身の長さが同じであればqsort()を使用し、通常
多いと思われるstringの中身の長さがまちまちであればstd::sort()を使う
のが良いと思われる。std::sort()はstd::stringが使われたらswap()によって
特殊化したテンプレート関数を起こすように設計されているとかなりの効率
の向上が期待できそうだ。以上。
0445デフォルトの名無しさんNGNG
追記。stringには比較演算子がオーバーロードされているが、このように
c_str()を使ってstrcmp()による比較を用いた方がVC7.1の場合は速くなった。
0446デフォルトの名無しさんNGNG
失礼。
>>444
×コピーコンストラクタなどの副作用
○代入演算子のオーバーヘッド
0447デフォルトの名無しさんNGNG
>>444
stringは中身の長さが異なってもクラス自体の大きさは一緒の処理系が
多いぞ。しかしそれに依存したプログラムを書くと移植性が無くなってしまう
けどな。
0448デフォルトの名無しさんNGNG
しかし標準C++ではsizeof(std::string)は取得可能のはずだから、固定長と
言う事でいいんじゃないの?
0449デフォルトの名無しさんNGNG
std::sortのswap相当部分をmemcpyにしたのが一番速い?
0450デフォルトの名無しさんNGNG
>>447
そもそも中身の大きさに応じて自身のサイズを変えるなんて出来るのか?
型がちがくなっちまわないか?
0451デフォルトの名無しさんNGNG
>>450
そりゃそうだよな。
0452デフォルトの名無しさんNGNG
>>447
確かに。
gccのstd::stringはsizeof(std::string)が4バイト。
0453デフォルトの名無しさんNGNG
アフォばっかだな
0454デフォルトの名無しさんNGNG
データの入れ替えでmemcpyを使って問題が発生する可能性って無いよね?
と思ったけど、thisをメンバに持ってるとか、そんなことやってる場合も多々あるな。
0455デフォルトの名無しさんNGNG
>>453
自分では何も書かないくせにアフォ言う権利ないよ。
0456デフォルトの名無しさんNGNG
型のサイズが変動する事なんて有り得ないって言うC++の基本が分かってないんだもの
0457デフォルトの名無しさんNGNG
>>454
そういう代物を複数用意して配列にセットする状況があるかどうかだが、・・・実際あるのかね?
リンクリストを車輪再発明したアフォクラスならありうるとは思うのだけど。
0458デフォルトの名無しさんNGNG
stringでも参照カウンタと他要素のthis持ったりするよね。
0459デフォルトの名無しさんNGNG
>>457
可能性 * 効果 = 期待値
で考えると、この件は可能性が低いながら、
かなり悲惨な効果があるので積極的に回避すべきかと。
0460デフォルトの名無しさんNGNG
qsort速っ
0461デフォルトの名無しさんNGNG
そんなことより boost はまだかよ
もうガマン汁出まくりですよ
0462デフォルトの名無しさんNGNG
Visual C++ Toolkit 2003でSTLPortをinstallする方法をご教授ください。
ググってもいまいちピンときません。
0463デフォルトの名無しさんNGNG
>>461
隔離スレから出てくるなよ
http://pc5.2ch.net/test/read.cgi/tech/1091198276/
0464デフォルトの名無しさんNGNG
こっちの方が隔離スレという気がしないでもない。
0465デフォルトの名無しさんNGNG
>>458
他要素といっても同じstring型の情報じゃないでしょ。
ヒープ上に参照カウンタをもったアロケータが作成されており、
そのアロケータへのポインタだけを持っているというのがstringクラスの実態だろう。(gcc)
0466デフォルトの名無しさんNGNG
>>465
そんなの実装による。
0467デフォルトの名無しさんNGNG
猫を積み上げる何個の方法だったかな…
0468デフォルトの名無しさんNGNG
>>467
16
0469デフォルトの名無しさんNGNG
>>465
ということは、stringのコピー時には文字列自体のコピーは発生しない(copy on write)
と思ってよい?
0470デフォルトの名無しさんNGNG
>>469
だからそれも実装依存だっつーのに
0471デフォルトの名無しさんNGNG
>>470
ソースは?
0472デフォルトの名無しさんNGNG
>>471
>>467-468が載ってる本
0473デフォルトの名無しさんNGNG
>>472
持ってないな。
買っとこ。
0474デフォルトの名無しさんNGNG
>>469
まあ少なくともgccとvcではそういう実装になっている。
安心してコピーしてよい。
0475デフォルトの名無しさんNGNG
VC++7.1付属のSTLはCOWしてないんじゃなかったか。
Effective STL 15項でいう実装D
0476デフォルトの名無しさんNGNG
してないね。…何だよこの汚いコーディングスタイルは…
0477デフォルトの名無しさんNGNG
>>476 ( ゚д゚)ポカーン
0478デフォルトの名無しさんNGNG
VCとSTLportはしてなかったような気がしたけど。
昔のことだから今どうなってるかは分からないけどね。
0479デフォルトの名無しさんNGNG
wstringに3バイトの漢字が入ったらどうなるのですか?
sizeof(wchar_t)って2ですよね?
0480デフォルトの名無しさんNGNG
wide character string
multi byte string
の違い理解していますか?
0481デフォルトの名無しさんNGNG
3バイト文字なんてあるの???
0482デフォルトの名無しさんNGNG
481 名前:デフォルトの名無しさん[sage] 投稿日:04/11/05 09:31:43
3バイト文字なんてあるの???
0483デフォルトの名無しさんNGNG
482 名前:デフォルトの名無しさん[sage] 投稿日:04/11/05 09:46:43
481 名前:デフォルトの名無しさん[sage] 投稿日:04/11/05 09:31:43
3バイト文字なんてあるの???
0484デフォルトの名無しさんNGNG
483 名前:デフォルトの名無しさん[sage] 投稿日:04/11/05 09:55:26
482 名前:デフォルトの名無しさん[sage] 投稿日:04/11/05 09:46:43
481 名前:デフォルトの名無しさん[sage] 投稿日:04/11/05 09:31:43
3バイト文字なんてあるの???
0485デフォルトの名無しさんNGNG
sizeof(wchar_t)==2のとき
UCS-2
sizeof(wchar_t)==4のとき
UCS-4

UTF-8とかは有り得ないから3バイトは無い
0486デフォルトの名無しさんNGNG
日本人ならUCS-4だろ。
チョソとかシナの漢字と統合なんて嫌だろ。
0487デフォルトの名無しさんNGNG
486 名前:デフォルトの名無しさん[sage] 投稿日:04/11/05 10:01:05
日本人ならUCS-4だろ。
チョソとかシナの漢字と統合なんて嫌だろ。
0488コピペ推奨NGNG
新宿区・信濃町でカメラ撮影をすると、カルト信者が尾行を始める
http://white.jpg-gif.net/bbsx/18/img/95687.jpg
http://white.jpg-gif.net/bbsx/18/img/101346.jpg
http://white.jpg-gif.net/bbsx/18/img/103468.jpg
http://white.jpg-gif.net/bbsx/18/img/95697.jpg
0489デフォルトの名無しさんNGNG
487 名前:デフォルトの名無しさん :04/11/05 10:03:27
486 名前:デフォルトの名無しさん[sage] 投稿日:04/11/05 10:01:05
日本人ならUCS-4だろ。
チョソとかシナの漢字と統合なんて嫌だろ。
0490デフォルトの名無しさんNGNG
>>464は正しい感じ
0491デフォルトの名無しさんNGNG
490=464
0492デフォルトの名無しさんNGNG
rubyは正しい感じ
0493デフォルトの名無しさんNGNG
sizeof(wchar_t)が何バイトかというのとエンコードには全く関連はない。
ちなみにWindowsでは一般的に2だが(APIの関係上)、Linuxなんかだと普通4
0494デフォルトの名無しさんNGNG
sizeof(wwchar_t) == 2な環境で、UCS-4にしたいなら、
sizeof(wwchar_t) == 4なchar_traitsの型作って、
basic_string<wwchar_t>すればいいけど、
>>479はUTF-8の事を言っているとしか思えん…

Cでmbsはchar []であるように、C++でmbsはstringです。
0495デフォルトの名無しさんNGNG
wchar_t==2
wwchar_t==4
こう統一しようぜ
0496デフォルトの名無しさんNGNG
痛いスレだな
0497デフォルトの名無しさんNGNG
>>494
> sizeof(wwchar_t) == 2な環境で、UCS-4にしたいなら、
< sizeof(wchar_t) == 2な環境で、UCS-4にしたいなら、
0498デフォルトの名無しさんNGNG
VC6だけどmbsのstringって化けませんか?
basic_string<char> でもbasic_string<unsigned char>でも
sjisやjis入れてtokenizerすると化けるのですが 仕様?
あきらめて wstringにしたけどね
0499デフォルトの名無しさんNGNG
そりゃあんた、stringはmbsに対応してないもん
0500498NGNG
>>894 で
> Cでmbsはchar []であるように、C++でmbsはstringです。
ってのがあったから すこし希望を見たんだけど やっぱ無理でつよね orz
あとCでmbsはchar[]とあるけど mbsは unsigned char[]ってのはVCの方言?
0501デフォルトの名無しさんNGNG
それ以前にsize()と文字数は全く別なものであるという突っ込みはないのか?
0502デフォルトの名無しさんNGNG
>>498
stringがmbsに対応していないのではなくて、tokenizerがmbsに対応していないだけ。

このスレ全体の印象として、初心者が回答者を演じているみたいなので
もうこのスレのログは削除して2度と来ないことにした、マジで。
有益な情報全然ないし。
0503デフォルトの名無しさんNGNG
>>501
そんな的外れな突っ込みはないよ。
0504デフォルトの名無しさんNGNG
まあ、std::stringがmbsに対応していないのは事実だが
0505デフォルトの名無しさんNGNG
char_traitsだけではMBSは扱いきれないんでしたっけ?
ちょっと前どこかのスレで話題に上ってたように思うんだけれど.
0506デフォルトの名無しさんNGNG
基本的にmbsでoperator[]を実装するのは無理だから。
0507デフォルトの名無しさんNGNG
無理じゃないよ
0508デフォルトの名無しさんNGNG
>>506
定数時間ですまないから?
>>507
詳しく
0509デフォルトの名無しさんNGNG
>>505
>>504はstd::base_string<class T>だと言いたいのでは?とエスパリング。
0510デフォルトの名無しさんNGNG
まあ、コンテナとして扱いたいってならmbcharクラスでも作らないとダメだわね。
がんばって作ったとしても、実行効率が悪そうな気もする。

コンテナとして扱わないなら、
問題になるのはfindとかだけなんだから、そこらへんをうまく、
MSのCRTみたいに、_MBCSが#defineされてるときはMBCS対応になるようにするとか、
そんな感じかな。
0511デフォルトの名無しさんNGNG
mbcsってのはbyte sequenceを、
multi byte character sequenceと「見做す」わけだから、
basic_stringで扱えないのは当たり前。
これは固定幅の文字のsequenceなんだから。

>>510
mbcharクラスってbasic_string<mbchar>するの?
それってwchar_tじゃない…
0512デフォルトの名無しさんNGNG
MSDNみてたら
文字のエスケープのところで
\xhhhh Unicode character in hexadecimal notation if this escape sequence is used in a wide-character constant or a Unicode string literal.
っての見つけたんですが、Microsoft Specific になっていないようなのですが、
VC++ では wchar_t はどうせ 2バイトだからこれでもいいとしても、
wchar_t がもっと大きい環境で U+00010000 以上の文字を扱いたいときはどうすればいいんでしょうか?

それと>>485って保証されてるんでしょうか?
いろんなエンコーディングを扱う汎用的なプログラムを書きたいんですが
485 が保証されてるとめちゃうれしいです・・・。
0513デフォルトの名無しさんNGNG
std::wstringになにが入ってるかなんか知るかヴォケ
0514デフォルトの名無しさんNGNG
>>512
それはwchar_tは使えないという事じゃない。

そもそも汎用にしたいのに、>>485が嬉しいってことが理解できない。
UCS-4やUTF-32扱えないと汎用にはならないから、
uint32_tを使うんが良いんじゃないの?
uint16_tでサロゲートペアを明示的に扱いますって言うんなら別だけど。
0515デフォルトの名無しさんNGNG
言語の質問でなくて申しわけないのですが、
kdevelopでSTLの入力補完をすることはできるのでしょうか?
0516デフォルトの名無しさんNGNG
>>514
L'\x0041' == L'A' == 0x0041;
これを期待してもいいのか?ってことです。
0517デフォルトの名無しさんNGNG
駄目です。当たり前です。
0518デフォルトの名無しさんNGNG
>>517
(512のMSDNの記述によると)
L'\x0041' == L'A'
までは保証されていると考えてよいのでしょうか?
0519デフォルトの名無しさんNGNG
マイクロソフトの世界では。(== 0x0041もね)
0520デフォルトの名無しさんNGNG
ワイド文字がUnicodeってのはVC++の実装であってC++の規格としてはなんの保証もない。
0521デフォルトの名無しさんNGNG
STL関係ないし、これでこの話題打ち切りね。
0522デフォルトの名無しさんNGNG
>>519-520
つまりMicrosoft Specificに指定し忘れただけということでしょうか。
0523デフォルトの名無しさんNGNG
>>521
basic_stringはSTLだぞ
0524デフォルトの名無しさんNGNG
Windows はUCS-2をサポートし,
Linux は,UCS-2 の上位セットである UCS-4 をサポートしています。

C++Builderのヘルプより。
やっぱwchar_tが2バイトならUCS-2で
wchar_tが4バイトならUCS-4でいいんじゃないの?
0525デフォルトの名無しさんNGNG
Rubyで全て解決。
C++なんて問題外^^;;;
0526デフォルトの名無しさんNGNG
>>524
ほとんどの処理系がそうなっているだけでC++の規格ではそうでなくても良い。
とはいっても代わりに使えるものなんてないと思うけどな。
0527デフォルトの名無しさんNGNG
Windowsは正確には『サロゲート・ペアを除いたUTF-16』だったような覚えが。
0528デフォルトの名無しさんNGNG
wstringを使おうとしたところ、undeclaredのエラーが出ました。
#include <string>とusing namespace stdは書いてあります。
Cygwinとg++を使っています。
何がいけないのでしょう。
0529デフォルトの名無しさんNGNG
>528
・エラーメッセージを勝手に省略しない
・ソースコードの原因となっていそうな部分は最低限提示する
0530528NGNG
とりあえずソースはこれだけです。
#include <string>
using namespace std;
int main()
{
  wstring s;
  return 0;
}

エラーメッセージは
main.cpp: In function `int main()':
main.cpp:6: error: `wstring' undeclared (first use this function)
main.cpp:6: error: (Each undeclared identifier is reported only once for each
function it appears in.)
というものです。
0531デフォルトの名無しさんNGNG
>>528
>何がいけないのでしょう。

g++
0532デフォルトの名無しさんNGNG
インクルードパスのstringヘッダみりゃ分かるけど多分wstringのtypedefがコメントアウトされてる。
0533528NGNG
cygwin以外にも、LinuxとSolarisで試しましたが、やはり同じエラーが出ました。

>>531
g++とだけ言われても分かりません。
0534デフォルトの名無しさんNGNG
>>533

g++ で wchar_t まわりをあてにしてはいけません。
はっきり言ってウンコです。
0535528NGNG
ヘッダを見ると確かにコメントアウトされていました。
typedef basic_string <wchar_t> wstring;
を自分で定義してコンパイルは通ったのですが、なんでコメントアウトされてるんでしょう。
そもそもwstringはANSIで標準化されているはずだと思うんですが、
ANSIの標準ってあまり当てにならないんでしょうか。
ともかく、どうもありがとうございました。
0536デフォルトの名無しさんNGNG
>>534が全て。
0537デフォルトの名無しさんNGNG
>ANSIの標準ってあまり当てに
C++のコンパイラってのは、準拠度を競ってるレベルだ、すごいだろ。
0538デフォルトの名無しさんNGNG
Vine2.6?
wstringがdefaultで使えんのは2.9xまで。3.xになるとOK。
2.9xのテンプレート周りは3.xに比べるとゴミ。
だからVineスレであれだけgcc3にしろと騒がれてた。
0539デフォルトの名無しさんNGNG
cygwinではgcc3にすると完全にwstringが使えなくなりますが、なにか?
0540デフォルトの名無しさんNGNG
なんかはらがたってきた にゃんにゃん
0541デフォルトの名無しさんNGNG
なんか○○がたってきた にゃんにゃん
0542デフォルトの名無しさんNGNG
にゃおーん
0543デフォルトの名無しさんNGNG
なんか○○が○○てきた にゃんにゃん
0544デフォルトの名無しさんNGNG
C++やるなら、正直GCCってゴミみたいな物だから。
あまり期待し過ぎないほうがいい。
0545デフォルトの名無しさんNGNG
localeまわりなんて商用じゃないと手が回らないからね。
0546デフォルトの名無しさんNGNG
2.9xでも使えないことはないよ。
ヘッダをいじってwstringの定義を復活させて
c_str()のところでcharの"\0"を返すところでエラーが出るので、
そこをちょめちょめすると使える。
あとはwcout/wcinがないのと、
定数のL"ABC"形式が使えんので自力で何とかすること。
実際にこれで仕事してたけど何ともない。
0547デフォルトの名無しさんNGNG
>>544
gcc3はborlandやVC6に比べればすんなりboostが使えるし
Linux上なら実行ファイルの巨大化もないのでいい感じ。
0548デフォルトの名無しさんNGNG
Linuxだと巨大なランタイムが標準で入ってるようなもんだからね
0549デフォルトの名無しさんNGNG
>>547
そうそう、gcc3は一番標準に近いよね。
マイクロソフトのQuickCなんてC99にすらまったく準拠していないし、
ボーランドのTurboC2.0とかもぜんぜん準拠していないしね。
それどころか、STLさえ付いていない。
gccの圧勝。
0550デフォルトの名無しさんNGNG
VBもwstring使えないんだよなw
ダメダメだな、マイクロソフトw
0551デフォルトの名無しさんNGNG
>>546
そこまでするなら、素直にCの範疇でやってれば良いのに・・・
わざわざC++使おうとするメリットって何?
0552デフォルトの名無しさんNGNG
>>549
いや、まだC99もSTLもなかったころのもんだろ。

これって釣られた?
0553デフォルトの名無しさんNGNG
>>551
大した事じゃない
0554デフォルトの名無しさんNGNG
VC6も10年前の製品だよな。
何でVC2003と比較しないんだろ。
0555デフォルトの名無しさんNGNG
>>551
Cはメンドイ。
>>554
VC2003がベストだな。でもその次はgcc3だな。
0556デフォルトの名無しさんNGNG
ボーランドはもうやる気ないの?
0557デフォルトの名無しさんNGNG
BCCの次のバージョンは100%ISO互換でexport対応だと豪語してたが。
0558デフォルトの名無しさんNGNG
exportイラネ
0559デフォルトの名無しさんNGNG
>>550
いつから gcc はマイクロソフトのものになったんだ?w

>>556
やる気もなにも上から下まで中の人が入れ替わってて
ブランドを引き継いでいるだけの事実上もう別の会社だろ。
0560デフォルトの名無しさんNGNG
>>555
自力で何とかすることとか書いておいてメンドイってどういうことなんだろ?
わざわざGCC使ったりいまいち意味がわからない。
0561デフォルトの名無しさんNGNG
>>555
今やVC++7.1だけではなく、icc-8.1もCW9.2もboost100%でありgccはかなり遅れたコンパイラ。
0562デフォルトの名無しさんNGNG
gccがかなり遅れたコンパイラなら
bccはゴミ未満だな
0563デフォルトの名無しさんNGNG
結論だけ書くと、VC6≒gcc3。
だいたいこんな感じ。
0564デフォルトの名無しさんNGNG
>>563
それはない
0565デフォルトの名無しさんNGNG
英語圏の人が主に開発してるから
wcha_tとかどうでもいいんだよ。たぶん
0566デフォルトの名無しさんNGNG
UNIXユーザはやたらUCS敵視してるDQNとかたくさんいるしな
0567デフォルトの名無しさんNGNG
>>564
すまん間違えた。
gcc3≒LSI-C86試食版。
大体こんな感じ。
0568デフォルトの名無しさんNGNG
おまいらもっと開発に貢献汁!
0569デフォルトの名無しさんNGNG
>>561
メンドイのは可変長のバッファサイズの管理。reallocとか。
ヘッダを数行いじるのは別にメンドクない。
0570デフォルトの名無しさんNGNG
gccと試食版。
雑誌の付録についてくるところとか、ユーザが中学生ってところがそっくり。
これで勉強して大人になったら本物のコンパイラを買う。
0571デフォルトの名無しさんNGNG
>>567
あやまれ!
LSI-C86試食版にあやまれ!
誰かAAお願い
0572デフォルトの名無しさんNGNG
Intel-Cは動作条件としては単体では使えない代物なので
MSのやつの追加キットと考えるべきかと。
0573デフォルトの名無しさんNGNG
>>569
文字列定数をワイド文字にするのはいいの?
あなた書き込みが相当おかしいですよ?
0574デフォルトの名無しさんNGNG
>>562
えー、そのbccだってwstringぐらい使えるよーw
0575デフォルトの名無しさんNGNG
>>572
ICC@Linuxは?
0576デフォルトの名無しさんNGNG
えー、gccだってspiritくらいつかえるよー
0577デフォルトの名無しさんNGNG
>>575
Linux版のicc-8.1はboost100%じゃないよ
0578デフォルトの名無しさんNGNG
GCCはもともとCコンパイラだからな。
C++やりたいなら、まともなC++コンパイラ買わないと・・・
0579デフォルトの名無しさんNGNG
>>576
spiritが使えないのとwstringが使えないのでは全然致命度が違うぞ。
wstringが使えないのはいくらなんでもお粗末過ぎる。
0580デフォルトの名無しさんNGNG
>>573
うん、いいの。定数をワイドにする必要の有無に関わらず、
ネット上を流れたりディスク上に保存するデータはマルチバイトなので、
変換処理はいずれにしても必要。
仕様が統一されとらんワイドキャラで通信すると
クライアントとの互換性がまずいだろ。
0581デフォルトの名無しさんNGNG
>>567

:.,' . : : ; .::i'メ、,_  i.::l ';:.: l '、:.:::! l::! : :'、:i'、: : !, : : : : : :l:.'、: :
'! ,' . : i .;'l;' _,,ニ';、,iソ  '; :l ,';.::! i:.!  : '、!:';:. :!:. : : : :.; i : :'、:
i:.i、: :。:!.i.:',r'゙,rf"`'iミ,`'' ゙ ';.i `N,_i;i___,,_,'、-';‐l'i'':':':':‐!: i : : '、
i:.!:'、: :.:!l :'゙ i゙:;i{igil};:;l'   ヾ!  'i : l',r',テr'‐ミ;‐ミ';i:'i::. : i i i : : :i
:!!゚:i.'、o:'、 ゙、::゙''".::ノ        i゙:;:li,__,ノ;:'.、'、 :'i:::. i. !! : : !:
.' :,'. :゙>;::'、⊂‐ニ;;'´          '、';{|llll!: :;ノ ! : !::i. : : : : i :
: :,' /. :iヾ、   `        、._. ミ;;--‐'´.  /.:i;!o: : : :i :
: ; : ,' : : i.:      <_       ` ' ' ``'‐⊃./. :,: : : O: i. :
: i ,'. . : :',      、,,_            ,.:': ,r'. : , : : !: :        あやまれ!
:,'/. : : . :;::'、     ゙|llllllllllllF':-.、       ,r';、r': . : :,i. : ;i : :     LSI-C86試食版にあやまれ!
i,': : : :.::;.'.:::;`、    |llllH". : : : :`、    ,rシイ...: : ; : :/:i : i:!::i:
;'. : :..:::;':::::;':::::`.、  |ソ/. : : : : : : ;,! ,/'゙. /.:::: :,:': :./',:!: j:;:i;!;
i. : .:::;:'i::::;':::::::::i::`:.、;゙、';‐ 、,;__;,/ノ  . :,/.:::: :/. : :/.:::i. j:;;;;;;;;
l .:::;:'::;':::;':::::::::::i::::i::`:,`'-二'‐-‐''゙_,、-.':゙/.:::: ;ィ': : :/.:::::i: j、;;;;;;;
.:::;:':::;':::;'::::::::::::::i:::i:::::..`'‐、、、-<゙.::::::::/.::: ://. : /.:::::::i :j::.'、:;;;
0582デフォルトの名無しさんNGNG
>>580
文字列定数と外部データを同じ土俵で比較できるの?
だったら何故、内部コードにワイド文字を使おうとする?
あなた本当に仕事でそんなことしてるの?
大丈夫?いや、あなたじゃなくてあなたの会社。
0583デフォルトの名無しさんNGNG
>>582
自前の正規表現マッチャやHTMLパーサがワイド専用だからだよ。
その方が性能がいいからね。
内部処理はワイド、外部はマルチ、これがポリシー。
0584デフォルトの名無しさんNGNG
>>583
なら、文字列定数もワイドのはずでしょ?
それとも国際化のために文字列定数を持たないポリシーとか言い出すの?
ほんと、大丈夫?
0585デフォルトの名無しさんNGNG
国際化のためじゃないの。
正規表現処理が高性能化するからだよ。
理由がわからなきゃ教科書嫁。
0586デフォルトの名無しさんNGNG
>>585
はぁ?
高性能化のために文字列を持たないの?
頭おかしくなっちゃった?
0587デフォルトの名無しさんNGNG
>>585って頭悪そう…
0588デフォルトの名無しさんNGNG
>>585晒しage!
0589デフォルトの名無しさんNGNG
うわ、すごい反応w
0590デフォルトの名無しさんNGNG
ばかばかしい
0591デフォルトの名無しさんNGNG
盛り上がってるみたいだが、いまいち展開がわからん。
誰か解説して。
0592デフォルトの名無しさんNGNG
ワイドだと[あ-ん]とか出来るからとか言ったら真性だな
0593デフォルトの名無しさんNGNG
つーか今、内部処理だけワイドってふつーじゃん。
MSでもCOMの機能使う時とかワイドに変換して引数渡すだろ。
0594デフォルトの名無しさんNGNG
ワイド文字列定数を記述できないことが主題?
0595デフォルトの名無しさんNGNG
>>593
普通だよ。
それを>>585が、文字列定数はマルチバイトのほうがいいって言い張ってる。
内部処理はワイドだけど文字列定数はマルチバイトってめんどくさいはずなんだが。
0596デフォルトの名無しさんNGNG
(std::string(s) == CA2W(”あいうえお"))がそれほどめんどくさいと思うか?
0597デフォルトの名無しさんNGNG
タイポだ(std:wstring(s) == CA2W(”あいうえお"))
0598デフォルトの名無しさんNGNG
Cはメンドイってのが琴線に触れたっぽい。
0599デフォルトの名無しさんNGNG
内部処理はワイドだけど、
オブジェクトへのデータ入力がマルチバイトのインターフェイスで統一されてるから
文字列定数もマルチバイトにしてるってだけの話ならわからんでもないんだが。
0600デフォルトの名無しさんNGNG
>>596
L"あいうえお"よりいいと言い張る根拠は何なの?
しかも高性能化するってどういうこと?
わざわざそんなことする理由は何?
0601デフォルトの名無しさんNGNG
>>596晒しage!
0602デフォルトの名無しさんNGNG
なるほど、実質二人が戯れてるわけですね
0603デフォルトの名無しさんNGNG
バッファオーバーフローの害について言及されている昨今、
固定長バッファのsprintfとか実にめんどくさいと思うんだが。
0604デフォルトの名無しさんNGNG
くだらない議論はやめてー にゃんにゃん
0605デフォルトの名無しさんNGNG
そこでstrstreamとみせかけてCString::formatですよ
0606デフォルトの名無しさんNGNG
結論だけ書くとCStringが一番いい。
0607デフォルトの名無しさんNGNG
boost::formatでいいじゃん。bcc55でもgcc3でもVC7でもOKだし。
0608デフォルトの名無しさんNGNG
boost使うとサイズが一気に10倍に!?
あんなもん使えるかボケ
0609デフォルトの名無しさんNGNG
かボケって何?
0610デフォルトの名無しさんNGNG
サイズなんか気にすんな
0611デフォルトの名無しさんNGNG
どうしたんだみんな、今夜はやけにノリノリじゃないか?
0612デフォルトの名無しさんNGNG
HellowWorld表示するだけで4Mバイトのexeになる
wxWindows+mingw萌え
0613デフォルトの名無しさんNGNG
>>612
さらにboost注入!
40MB!!すげー!!
0614デフォルトの名無しさんNGNG
VC6 で string の挙動がおかしいです。誰か助けてください!

string str;
str.resize(4096);
str[0] = '*';
int n = str.size();

ここで n=4096 とならないといけないのに、
n=1 となってしまいます。
どうしてでしょうか?

string をバッファとして使いたくて上記のコードを書いているのですが、
うまくいかなくて悩んでいます。
0615デフォルトの名無しさんNGNG
いくらVC6とはいえ、一文字しか入れてないのにsizeが1にならなかったらダメでしょう。
str.reserve(4096); としてみては?
0616デフォルトの名無しさんNGNG
>>615
ありがとうございます。
resize() をしているので、4096 になるべきだと思いますが。。。

で、私の手違いだとということが分かりました。

void func(string* line)
{
line->resize(4096);
line[0] = '*';
int n = line->size();
}

こんなことをしていたので間違ってしまいました。
line はポインタなので

(*line)[0] = '*'

としたら正常に動作しました。
0617615NGNG
と思ったけどresizeでも4096にならないとダメな気が…
VC6は窓から投げ捨てましょう
0618デフォルトの名無しさんNGNG
>>614
VC++6.0+付属STLでやってみたが4096って出るが。
0619デフォルトの名無しさんNGNG
C++なら小難しいポインタは捨ててできるだけリファレンスを使え。

void func(string& line)
0620デフォルトの名無しさんNGNG
heapオブジェクトの参照はとれますか
0621デフォルトの名無しさんNGNG
>>620
「heapオブジェクト」とは何ですか?
0622デフォルトの名無しさんNGNG
const以外で参照を渡すのは見ていて吐き気がするのでやめてください
0623デフォルトの名無しさんNGNG
中身を変えたい時はconst castですか?
0624デフォルトの名無しさんNGNG
>>622
医者に診てもらえ
0625デフォルトの名無しさんNGNG
>>622
上のスレの流れちゃんと見て発言してる?
0626デフォルトの名無しさんNGNG
>>622
良かったな!大漁だぞ
0627デフォルトの名無しさんNGNG
>>621
たぶんnewでメモリを確保したオブジェクトの事だろう。
0628デフォルトの名無しさんNGNG
コピーコンストラクタが使えない時は
ポインタは使うしかないよね?
0629デフォルトの名無しさんNGNG
>>628
オブジェクトのコピーだろ?
GCCなら、やり方によっては何もしなくても参照にしてくれるぞ。
0630デフォルトの名無しさんNGNG
>>623-625
引数はポインタで受け取って、関数の頭で参照に入れればいい。
C++の参照渡しは呼び出す側は値渡しと同じ記述になってしまうので
後から見たときに値が変更されている可能性を発見しにくい。
値を変更するときは避けるのが常識。
C#ではout/refをつけることでこの問題を回避したね。
0631デフォルトの名無しさんNGNG
>>630
それを言うならポインタだって同じじゃん。主張の意図がよくわからん。
0632デフォルトの名無しさんNGNG
>>631
ポインタは&をつけるだろ。
0633デフォルトの名無しさんNGNG
constやreferenceは、callerを見ても、それがそうであると解からん、
そういう話だな。
ポインタ渡しだと指標になる、と。
0634デフォルトの名無しさんNGNG
>>632
そこまで行くとコーディングスタイルの問題だな。自分の常識を人に
むやみに押しつけないように。
0635デフォルトの名無しさんNGNG
俺のコーディングスタイルだと、
ポインタ渡しするのは、ナルポインタを使いたいときだな。
0636デフォルトの名無しさんNGNG
俺は値渡し以外認めないよ?
0637デフォルトの名無しさんNGNG
参照アドレスの値渡し
0638デフォルトの名無しさんNGNG
&記号が嫌いなので、俺はconstでない参照渡しをよく使う。
値を変更するかはヘッダで判断。
ただし、親オブジェクトを指定するのにはポインタ渡しを使う。
親からthisを渡す場合がほとんどだから。
0639デフォルトの名無しさんNGNG
値渡しと参照渡しが判別しにくいと言ってる人に聞きたいのだが、
君らは前方宣言で引数の型の確認もせずに関数を使うのかい?
0640デフォルトの名無しさんNGNG
>>639
コードを書くときの話じゃなくて可読性の問題。
少なくとも&がついてりゃそのことだけでアドレス渡しをしてることが
一目瞭然だけど、参照の場合、関数宣言を確認しないとわかんない。
0641デフォルトの名無しさんNGNG
STLのstringの中で保持していると思われる文字列のバッファって、
デストラクタの中で解放されてるんでしょうか?
なんかメモリがどんどん増えているんですが。
普通、閉じ括弧(})に来たときにデストラクタって自動で呼ばれるんですよね?
他にnewやmallocは使っていないので、stringしか考えられないんですが。
0642デフォルトの名無しさんNGNG
メモリが勝手に増えてくれたら嬉しくて悲鳴上げそうだ。
0643デフォルトの名無しさんNGNG
>>642
ポケットのなかには ビスケットがひとつ
ポケットをたたくと ビスケットがふたつ
もうひとつたたくと ビスケットがみっつ

 たたいてみるたび ビスケットがふえる
0644デフォルトの名無しさんNGNG
>>643
そんなふしぎなポケットがほしい
そんなふしぎなポケットがほしい
0645デフォルトの名無しさんNGNG
          ,、‐ ''"  ̄ ``'' ‐- 、
        /イハ/レ:::/V\∧ド\
       /::^'´::::::::::::i、::::::::::::::::::::::::::::\
     ‐'7::::::::::::::::::::::::ハ:ハ::|ヽ:::;、::::::::::::丶
     /::::::::::::::/!i::/|/  ! ヾ リハ:|;!、:::::::l
    /´7::::::::::〃|!/_,,、   ''"゛_^`''`‐ly:::ト
      /|;ィ:::::N,、‐'゛_,,.\   ´''""'ヽ  !;K
        ! |ハト〈  ,r''"゛  ,       リイ)|
          `y't     ヽ'         //    あははははは
         ! ぃ、     、;:==ヲ   〃
         `'' へ、   ` ‐ '゜   .イ
              `i;、     / l
                〉 ` ‐ ´   l`ヽ
            / !        レ' ヽ_
         _,、‐7   i|      i´   l `' ‐ 、_
     ,、-‐''"´  ノ,、-、 / 、,_ ,.、- {,ヘ   '、_    `ヽ、_
   / i    ,、イ ∨ l.j__,,、..-‐::-:;」,ハ、 '、` ‐、_   ,`ヽ
  /  l ,、‐'´ // ',/!:::::::::;、--ァ' /  `` ‐   `'7゛   ',
 /   l  i  ´  く   ';::::::l  / /         /     ',
/     ! l      \ ';:::l , '  /        i/     ',
0646デフォルトの名無しさんNGNG
ここは気色悪いスレですね
0647デフォルトの名無しさんNGNG
>>643
ポケットのなかには ビスケットがひとつ
ポケットをたたくと ビスケットがふたつ

×もうひとつたたくと ビスケットがみっつ
○もうひとつたたくと ビスケットがよっつ
0648デフォルトの名無しさんNGNG
ビスケットの数は増えていくが
一つ一つは小さくなって
結局総量は変わらないという罠
0649デフォルトの名無しさんNGNG
>>647
まだまだあまあまちゃんねー にゃんにゃん
0650デフォルトの名無しさんNGNG
for (i = 0; i < 1000; i++) { memset(&(std::vector<char>(100)[0]), 0, 100); }
これリークすると思ってるのかな?
0651デフォルトの名無しさんNGNG
結局>>622は、個人の好みの問題を他人に押しつける基地外ってことだね。
0652デフォルトの名無しさんNGNG
>>648
夢が無い人だな〜
0653デフォルトの名無しさんNGNG
>>648
いや寧ろ、細かな破片が生じる分食べられる分量は減るところまで考慮しなければ。
#つーか、それって単なる破砕だね。
0654デフォルトの名無しさんNGNG
しかし、誰が作ったんだろうな、こんなツッコミどころの多い歌。
0655デフォルトの名無しさんNGNG
>>650
それはするべきじゃないだろう
0656デフォルトの名無しさんNGNG
>>640
漏れも参照渡しは好きじゃない。理由は同じくソースの可読性
#define ByRef
とか書いて test( ByRef str ); とか書くのも気持ち悪いし
test( ByRef(str) ); もなんか違和感有るし
気持ち良い書き方は無いのかな・・
0657デフォルトの名無しさんNGNG
つーか、ポインタ渡しとconstポインタ渡しだって関数呼び出し側だけじゃ区別つかないだろうに。
0658デフォルトの名無しさんNGNG
>>657
明示的にキャスト書く
0659デフォルトの名無しさんNGNG
最悪だぞそれ
0660デフォルトの名無しさんNGNG
void assign_hello( std::string& str ){ str = L"Hello!"; }
はダメ、
void assign_hello( std::string& str ){ str.assign( L"Hello!" ); }
ならOK。
微妙な乙女心。
0661デフォルトの名無しさんNGNG
>>660
知らんかった
0662デフォルトの名無しさんNGNG
>>661
cout << typeid("Hello").name() << endl;
cout << typeid(L"Hello").name() << endl;
すれば一目瞭然
0663デフォルトの名無しさんNGNG
ごめんなさい、>>660->>662が何の話をしてるか解かりません。
どなか解説してください。
0664デフォルトの名無しさんNGNG
>>660
おねえさまはどうしてそんな話を持ち出されたのかしら。
0665デフォルトの名無しさんNGNG
stringの代入演算子にrhsがwchar_tの物が定義されてないって事か?
普通だったらwstringを使おうという発想が出てきそうなものだが・・・・
0666デフォルトの名無しさんNGNG
ごめん。Lはただの間違い。いつもの習慣でつけちゃった。
662は何が言いたいのかよくわかりません。

void assign_hello( std::string& str ){ str = "Hello!"; }
void assign_hello( std::string& str ){ str.assign( "Hello!" ); }

に訂正してお詫び申し上げます。
(結果が同じでも)代入目的で参照を受け取るのはイヤ。
戻り値にするべき。
0667デフォルトの名無しさんNGNG
>>660
gcc3.4.2(MinGW)+STLport4.6.2

C:\mingw\string_error.cpp: In function `void assign_hello2(_STL::string&)':
C:\mingw\string_error.cpp:5: error: no matching function for call to `_STL::basic_string<char, _STL::char_traits<char>,
_STL::allocator<char> >::assign(const wchar_t[7])'
C:/STLport-4.6.2/stlport/stl/_string.h:596: note: candidates are: _STL::basic_string<_CharT, _Traits, _Alloc>&
_STL::basic_string<_CharT, _Traits, _Alloc>::assign(const _STL::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char, _Traits = _STL::char_traits<char>, _Alloc = _STL::allocator<char>]
C:/STLport-4.6.2/stlport/stl/_string.h:599: note: _STL::basic_string<_CharT, _Traits, _Alloc>&
_STL::basic_string<_CharT, _Traits, _Alloc>::assign(const _STL::basic_string<_CharT, _Traits, _Alloc>&, size_t, size_t) [with _CharT = char, _Traits = _STL::char_traits<char>, _Alloc = _STL::allocator<char>]
C:/STLport-4.6.2/stlport/stl/_string.h:607: note: _STL::basic_string<_CharT, _Traits, _Alloc>&
_STL::basic_string<_CharT, _Traits, _Alloc>::assign(const _CharT*, size_t)
[with _CharT = char, _Traits = _STL::char_traits<char>, _Alloc = _STL::allocator<char>]
C:/STLport-4.6.2/stlport/stl/_string.h:610: note: _STL::basic_string<_CharT, _Traits, _Alloc>&
_STL::basic_string<_CharT, _Traits, _Alloc>::assign(const _CharT*) [with _CharT = char, _Traits = _STL::char_traits<char>, _Alloc = _STL::allocator<char>]
・・・・・

以下略。
ちなみに一個目の関数はコメントアウト。
0668デフォルトの名無しさんNGNG
>>666
fstreamのオブジェクトを他関数に渡す時は?
0669デフォルトの名無しさんNGNG
>>666を見ても、まだ何が言いたいのかわからない私はダメ人間ですか?
0670デフォルトの名無しさんNGNG
とんち?
0671デフォルトの名無しさんNGNG
void append_hello( std::string& str ){ str += "Hello!"; }
はダメ
void append_hello( std::string& str ){ str.append( "Hello!" ); }
ならOK

さてな〜んだ♪
0672デフォルトの名無しさんNGNG
>>666
> 662は何が言いたいのかよくわかりません。

ワラタ
0673デフォルトの名無しさんNGNG
>>666
>>661-662はoperator =()にconst wchar_t *を受け取るものはないがassignにはあるんだとでも思ったんだろう。
0674デフォルトの名無しさんNGNG
>>666
元々代入じゃなかった関数の中身が諸々の事情で
代入になった場合には、結果が同じでも関数の型を変更する気ですか?
0675デフォルトの名無しさんNGNG
俺も何が言いたいのか分からん
エスパーいないのか?
0676デフォルトの名無しさんNGNG
気分の問題なんだってさ。
operator=は特別なんだろう、彼にとって。
0677デフォルトの名無しさんNGNG
std::mapのキー値をchar*型としてstrcmpと同じような比較関数を指定したいんですが、どうやって指定すればいいんですか?
0678デフォルトの名無しさんNGNG
struct MyLess { bool operator < (const char *lhs, const char *rhs) const { return strcmp(lhs, rhs) < 0; } };

std::map<char *, value_type, MyLess> myMap;
0679デフォルトの名無しさんNGNG
operator () の間違い。
struct MyLess { bool operator () (const char *lhs, const char *rhs) const { return strcmp(lhs, rhs) < 0; } };

std::map<char *, value_type, MyLess> myMap;
0680デフォルトの名無しさんNGNG
それぐらい用意しとけよ、って思うけど、basic_string使って欲しいんだろうね。
0681デフォルトの名無しさんNGNG
basic_stringのコピーのコストが馬鹿にならないときもあるからねえ。
参照のみの文字列は重複なしでプールに叩き込んどいて、ポインタだけで
処理ってのも、少なくないな。

stringにしたって、数千〜数万のオーダーにでもならない限り目に見えて
差が出ることはあまりないけどね。

0682678NGNG
出来ました。
ありがとうございました。
0683677=682NGNG
番号違いましたねorz
0684デフォルトの名無しさんNGNG
basic_stringは参照カウンタうるからそんなにコピーのコストは低いしね
0685デフォルトの名無しさんNGNG
>>684
それは何回も言うように処理系依存。Copy on Writeが標準だとでも?
0686デフォルトの名無しさんNGNG
テンプレに処理系ごと実装を貼り付けるしかないのかな。
調べるの面土居けど。
0687デフォルトの名無しさんNGNG
Copy on Writeって何?
ググっても詳しいのが出てこない
0688デフォルトの名無しさんNGNG
オブジェクトのコピーをするとき、実体を共有するだけにしとくことで、小メモリ高速化を計る仕組み。
このままだと共有してるオブジェクトを変更すると別にコピーも変更されちゃう。
だから、変更操作しようとしたときに、そのオブジェクトの実体を(ほんとに)コピーする。

Linuxのメモリ管理とかでも使われてる枯れた手法。
0689デフォルトの名無しさんNGNG
共有してるかどうかを判断するために参照カウンタを持つわけだね。
0690デフォルトの名無しさんNGNG
listで以下の処理をしているのですが、
pop_back();
push_front(front());
front().update();
これをもっと効率良くする方法は無いでしょうか。
もしくは環状リストとして使う方法を知りたいです。
0691デフォルトの名無しさんNGNG
>>690
その処理のどこに不満があるの?
0692690NGNG
>>691
back()の領域を再利用したいんです。
0693デフォルトの名無しさんNGNG
queue ?
0694デフォルトの名無しさんNGNG
>>690
アロケータを書け。
0695デフォルトの名無しさんNGNG
>>692 splice
0696690NGNG
>>695
成る程。これで解決しそうです。
ありがとうございました。
0697デフォルトの名無しさんNGNG
spliceで解決なのか?
0698デフォルトの名無しさんNGNG
>>697
ほかに無いだろ。
0699デフォルトの名無しさんNGNG
splice でなんか問題あるの?
0700デフォルトの名無しさんNGNG
最後のを最初に移動したいだけ
0701デフォルトの名無しさんNGNG
setのinsertの返り血で、pairを返したときに、
secondのbool値は何を意味するんでしょうか?
0702デフォルトの名無しさんNGNG
挿入出来たかどうか
multi- では単に iterator だけが返されるようになる
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);
}

最発明ってほどのことでもないだろ
0803デフォルトの名無しさんNGNG
>>802
spaceはconst char *でもいいんじゃないか?
0804デフォルトの名無しさんNGNG
>>802
find_last_not_of の戻り値って、引数に含まれる文字を指すの?
そうじゃないと、1文字減っちゃうよね?
0805デフォルトの名無しさんNGNG
>>803
const char*からconst std::string&への暗黙の変換はあるが逆はないからこういう場合はconst char*よりconst std::string&のほうが潰しが効く。

>>804
+1してないから喰われてるな、たしかに。
0806デフォルトの名無しさんNGNG
配列Tを
T[N][N]としたんですが このようなエラーメッセージがでました。

declaration of `T' as multidimensional array must have
bounds for all dimensions except the first

これってなんですか?教えてください。
0807デフォルトの名無しさんNGNG
>>464
実装による。
0808デフォルトの名無しさんNGNG
>>801
それならCString::TrimLeft()を使うのもありだな
0809デフォルトの名無しさんNGNG
>>806 スレ違い。ソース持ってCスレ逝け。
0810デフォルトの名無しさんNGNG
>>654
歌を作った人は、べつにビスケットが割れることによって数量が増えるということを
意図したわけではありませんよ?
0811デフォルトの名無しさんNGNG
>>810も含めて、突っ込みどころが多いわけだ。
0812デフォルトの名無しさんNGNG
>>808
CStringのソースを参照するというなら兎も角、そのまま使うというならスレ違いだな。
0813デフォルトの名無しさんNGNG
>>812
流れを嫁
0814デフォルトの名無しさんNGNG
潰しが効くってどういう意味?
0815デフォルトの名無しさんNGNG
>>814
いろいろ応用できるってことだよー にゃんにゃん
0816デフォルトの名無しさんNGNG
>>815
最近良く見るその語尾のにゃんにゃんっての元ネタ何?
0817デフォルトの名無しさんNGNG
>>802
連続したスペースなどだったら使えないな〜
0818デフォルトの名無しさんNGNG
使えるだろ
0819デフォルトの名無しさんNGNG
>>816
ホワッツマイケル
0820デフォルトの名無しさんNGNG
>>818
817と同じ意味かどうかは知らんが、
src内にスペース以外の文字が一つも含まれていなければ失敗するね。
0821デフォルトの名無しさんNGNG
int val;
std::list<int> vallist;
val=*vallist.end();

この時valには何が入るんですか?
0822デフォルトの名無しさんNGNG
>>821
動作そのものが未定義
0823デフォルトの名無しさんNGNG
じゃあなんでコンパイルが通るんだよ
0824デフォルトの名無しさんNGNG
>>823
そりゃ、未定義だもん。どうなったって規格上OK。
ダメって定義されてるならコンパイル通らないだろうけどさ。
(そもそも静的にはチェックできないが。)
0825デフォルトの名無しさんNGNG
>>823
君が言っている事は

int a[10], i;
i = a[10];

でコンパイルが通るな、と言っているのと意味的にほとんど変わらん。
0826デフォルトの名無しさんNGNG
未定義の定義がはっきりしてないな。
まあ答えは"intと同じサイズのゴミ"なわけだが。(俺の環境では)
0827デフォルトの名無しさんNGNG
>>826
実装系依存
0828821NGNG
俺が聞きたかったのは、つまり次のような関数の返値でエラー判定を行うには
どうしたらいいのかということだ。でも簡単にするために>>821みたいに書いたんだよ。

struct Hoge{
  int value;
};
list<Hoge> hogelist;
Hoge Find(int x){
  list<Hoge>::iterator it;
  for(it=hogelist.begin(); it!=hogelist.end(); it++){
    if((*it).value==x) return *it;
  }
  return *it; //この時点でit==hogelist.end()である
}
0829821NGNG
分かると思いますが、Find(int x)は、クラスHogeのリストの中から
最初にvalueがxと一致した要素を返すものです。
もし一致する要素がなければ、エラーということにしたいのですが、
この時何を返してたらいいのかが分からないのです。
エラー判定用の引数をつけるという方法もありますが、あまりスマートではないので。
0830デフォルトの名無しさんNGNG
>>828
なぜfind_ifを使わない
0831デフォルトの名無しさんNGNG
Hoge型を返すんじゃ無理だな。
list<Hoge>::iteratorを返すようにすればFind(foo) == hogelist.end()で比較できる。
ってこれじゃ830の言う通りfind_if()で代用できるじゃないか。
0832デフォルトの名無しさんNGNG
例外投げて呼び出し側でcatchするとか
0833821NGNG
ありがとう。find_if()を調べてみるよ。
0834デフォルトの名無しさんNGNG
>>828
がんばれよ。
でも今後は、丁寧に質問しような。
0835デフォルトの名無しさんNGNG
STLPortのデバッグモードで叩き落せ!
0836山田NGNG

StreamReaderを使用してファイルを読み込む処理を行っています。

----------------------------------------------------
StreamReader sr = new StreamReader( "test.txt", System.Text.Encoding.GetEncoding( "SHIFT-JIS" ));
string input;
string sql;
while(( input = sr.ReadLine()) != null )
{
sql += input + "\r\n";
}
sr.Close();

---------------------------------------------------

1回目の呼び出しは、正常に行われるのですが、2回目以降呼び出すと
「プロセスはファイル "***" にアクセスできません。このファイルは別のプロセスが使用中です。」
というエラーメッセージが表示されます。
※読み込み対象ファイルは、1回目と2回目以降、異なります。

ストリームをクローズしているのに?どうしてこのようなエラーが・・・。
ご存じの方、いらっしゃいましたら、ご教授願います。
0837デフォルトの名無しさんNGNG
C#スレに帰れ
0838デフォルトの名無しさんNGNG
ストリームのクローズとファイルのクローズは違う。
・・・とかC#なんて見たこともないのに言ってみる。
0839デフォルトの名無しさんNGNG
821って中学生?
0840デフォルトの名無しさんNGNG
>>839
最近良く見るその中学生?っての元ネタ何?
0841デフォルトの名無しさんNGNG
>>840
厨房
0842デフォルトの名無しさんNGNG
ふつーにつかわないかね?
0843デフォルトの名無しさんNGNG
普通に使うよね。
最近生まれた言い回しでもないし、そんなによく見るわけでもない。
0844デフォルトの名無しさんNGNG
auto_ptr って使ってますぅ?
なんとなく使うの怖くないですか?
0845デフォルトの名無しさんNGNG
std::auto_ptr<>もboost::shared_ptr<>も使えないほうが怖すぎ。
0846デフォルトの名無しさんNGNG
new []をauto_ptrに突っ込むことほど怖い物はない。
0847デフォルトの名無しさんNGNG
deleteしたポインタを使うよりはマシ
0848デフォルトの名無しさんNGNG
vector に new した構造体のポインタを入れておいて、
後で列挙して delete する、っていうような作業がよく発生するんですけど、
こういうのを自動化してくれるモノはないんでしょうか。
0849デフォルトの名無しさんNGNG
スマートポインタとvectorを組み合わせて使う
0850デフォルトの名無しさんNGNG
>>848
そういうvectorの派生クラスでも自作する
0851デフォルトの名無しさんNGNG
>>850
こんなのでいい?

template<typename T>
class auto_vector : public vector<T> {
  ~auto_vector(void) {
    // ここで delete
  }
};
0852デフォルトの名無しさんNGNG
>>851
vector<hoge>* ptr = new auto_vector<hoge>;
…
delete ptr; // あぼーん
0853デフォルトの名無しさんNGNG
>>852 ( ´_ゝ`)フーン
0854デフォルトの名無しさんNGNG
reference counting
0855デフォルトの名無しさんNGNG
referrence
0856デフォルトの名無しさんNGNG
といった間違いをしないように。

(例) HTTP_REFERRER
0857デフォルトの名無しさんNGNG
#include <iostream>
#include<list>
using namespace std;
void disp( list<int>& lst ){
list<int>::iterator itr = lst.begin();
list<int>::iterator itrEnd = lst.end();
for( ; itr != lst.end() ; itr++ )
cout << *itr << " ";
cout << endl;
}
int main(int argc, char* argv[]){
list<int> lst1, lst2, lst3, lst4;
int i, n;
for( i = 0 ; i < 5 ; i++ ){
// listなので、push_frontが使える
lst1.push_front( i );
}
cout << "list1 ";
disp( lst1 );
cout << endl;
list<int>::iterator itr2 = lst1.begin();
lst1.erase(itr2);
cout << "list1 ";
disp( lst1 );
cout << endl;
return 0;
}
で、list1の3番目の要素を表示するにはどうすればよいのでしょうか?
0858デフォルトの名無しさんNGNG
>>857
質問の意味がよくわかりません
list1 4 3 2 1 0

list1 3 2 1 0

と出ますがどういうことしたいのですか?
0859デフォルトの名無しさんNGNG
>>858
わかりにくくてすいません
いまlistの勉強をしてまして
list1の一番初めの要素を削除する実験をやってたんです

list1の3番目の要素を削除する方法も知りたいです
0860デフォルトの名無しさんNGNG
>>859
beginでとったイテレータを3回インクリメントするか
std::advance
0861860NGNG
2回の間違いね
0862デフォルトの名無しさんNGNG
>>860
ありがとうございました
できました
0863デフォルトの名無しさんNGNG
lisper?
0864デフォルトの名無しさんNGNG
イアーウィスパー
0865デフォルトの名無しさんNGNG
以下のプログラムは、
1
2
Construct
Destruct
3
4
Destruct
という結果になるのですが、STLに自動変数オブジェクトを突っ込むと
どういう解釈が行われるのでしょうか? 識者の方教えてください。

#include <iostream>
#include <list>
using namespace std;
class T {
public:
T(){ cout << "Construct" << endl; }
~T() { cout << "Destruct" << endl; }
};
int main()
{
list<T> l;
cout << "1" << endl;
{
cout << "2" << endl;
l.push_back(T());
cout << "3" << endl;
}
cout << "4" << endl;
return 0;
}
0866デフォルトの名無しさんNGNG
>>865です。

T(const T &t){ cout << "Copy Construct" << endl; }
というコピーコンストラクタを作成してみたところ、
1
2
Construct
Copy Construct
Destruct
3
4
Destruct
という結果になりました。コピーコンストラクトされているのかな。
もうちょっと本を読んでみます。
0867デフォルトの名無しさんNGNG
何故こんな事すら知らない香具師が STL 使ってるのかが激しく疑問だ
0868デフォルトの名無しさんNGNG
>>867
セコイ奴
0869デフォルトの名無しさんNGNG
>>867
あなただって最初は何も知らなかったでしょう。
無知をバカにする姿勢はよろしくない。
0870デフォルトの名無しさんNGNG
そうだそうだ
0871デフォルトの名無しさんNGNG
くりーむそーだ
0872デフォルトの名無しさんNGNG
>>865です。

Effective STLの第3項に該当情報がありました。
コピーされるのですね。んで、ポインタのコンテナにするよりも、
スマートポイントのコンテナにした方が良いということがわかりました。

>>867
ごめんなさい。
0873デフォルトの名無しさんNGNG
>>872
余計なお世話かもしれないが、auto_ptrはだめだぞ。
EffectiveSTL読んでるんだったらわかると思うが。

しかしboost::shared_ptrにstd::mem_fun適用しようとすると怒られるな。
素直にboost::mem_fn使えって事か。boostのいくつかが早く標準化
するまではこうしたゴタゴタを承知の上で使って行かなければならんなー
0874デフォルトの名無しさんNGNG
auto_ptrを無条件にダメという奴はgotoを無条件にダメと言ってる奴と大差ない
0875デフォルトの名無しさんNGNG
そうだそうだ。お兄ちゃんに謝れ。
0876デフォルトの名無しさんNGNG
>>874
アルゴリズムでコンテナの中身をいじくる奴を動かすと大変な事になるだろが。
それに、COAPがそもそもコンパイルを通さない場合もあるし。
知ったか君は帰っていいよ。
0877デフォルトの名無しさんNGNG
>>875

   |    ,.ゝ─-,.r'´ ̄ `丶、       |  猫だよ
    ヽ,.r'"   ,. / ヽ `ヽ--─ '"フ     |
   /  ,.' /  il i ヽ 丶   ,.イ    |   ニャン ニャン
 ,.イ/  /i /l   !| l   ヽ l,..ノ,. 'i    |
  /ィ / /-ノ、l  ハ ! ! : l i/j l |    ノノ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ! l/ ,ir‐‐、 iヽl -ヽl、 l !│ / ,' !
   )r'! i l;;ソ   ‐r‐、,ソ,.j / / /,ィ      ,. -‐- 、
  '´ l |  '     j.:.::ゞj /、 / // i     / ,. -、 ヽ
    l lヽ  l>  `'‐'"//ッノ ! ハ! `   /  , '   ヽ ゙!
   ,.-l 、ゝ、 __ ,.  ‐'フ,' ミ,.| j |     ,'  /    j  l
  /  ` シ;.    "'ツ'´  ,シヽ' `'    |  l    ノ! ,.ヘ
  !   ,.ゞヘ;.j、ハ.r;.iゞ'ミ'゙   `丶、   l  '、    '"'´
  l l / /  ヽ   ヽ      ヽ   ヽ 丶
  ヽ,i'  , '   > '´ ヽ   ヽ、     j    ヽ、 ヽ
  /  '、 ,.'   ,ノ   リ     ,ヘ、    ヽ ヽ
  !   ヽj  ,. '"      !    l  ヽ、. --、._ j  !
  丶   `'´       ノ‐--- '!        〉i`ヾ、
    ヽ...,, -- 、..    ,. '"|     j      / ,'   ヽ
     ト、 ヽi ゙;,,.シ ̄;ゞ  l    ,'l     ,.' ノ-'"  丶
    〉、  l `''"^'''"´ ̄|     l、..__,. -' =‐- 、.._   i
     | 丶. !   ,. ‐ ' ´l   、l,. - ‐ '" ̄ `丶、 ` |
     |   l ,. '´    l     !             ヽ j
    !  /      ,. !   │          /
    l. , '         /  l     l             ,.'
     ,!'       /    l    |           /
   /        , '      l   |     ,. ‐'´
   !      /         !,.=ゝ_,. -‐' ´
   !     ,'        ,j    ヽ‐ 、"""''' ─-- ....
   丶、    l      イl l   、ヽ丶,j
     ` ‐- ' ヽ      j ! j /^ヽヽヽl
0878デフォルトの名無しさんNGNG
だいたい標準C++はauto_ptrをコンテナに入れる事自体を禁止している。
auto_ptrはリソース・リーク対策だけに限定して使うべきだ。
0879デフォルトの名無しさんNGNG
STLコンテナの要素にauto_ptr使うのは無条件にダメだろ。
0880デフォルトの名無しさんNGNG
>>874は厚顔無恥
0881デフォルトの名無しさんNGNG
>>874はgotoは無条件に駄目な人なんじゃないか? (w
0882デフォルトの名無しさんNGNG
>>880 >>881
auto_ptrの使い方を知らないバカ
>>876 >>878
だからそうだと言っている。
0883デフォルトの名無しさんNGNG
vectorは普通の配列のようにhoge[4]って感じで5番目の中身を参照できるようですが、
setは[]使えないんですか?
iterator使うしかなんでしょうか。
0884デフォルトの名無しさんNGNG
2行目、分かり難くなりましたが、
setの場合はhoge[n]のように要素番号を指定できないのでしょうか?ということです。
例えばforループのなかで中身を取り出すだけで
わざわざiteratorを用意するのは面倒くさいなと思いまして。。。
0885デフォルトの名無しさんNGNG
>>883
>setは[]使えないんですか?
>iterator使うしかなんでしょうか。
はい
ただライブラリはそののまま使わなくてもいいのですよ
もし必要なら
template <typename T>
class set: private set <T>
{
public:
typedef set <T>::value_type value_type;
value_type &operator [] (size_t p);
};
とでもしてoperator []を実装するのは自由です
0886885NGNG
class名setは変えたが良いかも
0887デフォルトの名無しさんNGNG
>>884
>わざわざiteratorを用意するのは面倒くさいなと思いまして。。。
ちなみにこの理由でiteratorを使わないのはどうかと思いますよ
0888デフォルトの名無しさんNGNG
setにはoperator[]はないので無理です。
それはそうとみんなsetとmapどう使い分けてるんだろう・・・
0889デフォルトの名無しさんNGNG
(;´Д`)エー
0890デフォルトの名無しさんNGNG
それはそうとみんな箸と茶碗をどう使い分けてるんだろう・・・
0891デフォルトの名無しさんNGNG
箸:叩く
茶碗:叩かれる

(・∀・ )っ/凵 ⌒☆チン
0892デフォルトの名無しさんNGNG
それはそうとみんなぬるぽとガッをどう使い分けてるんだろう・・・
0893デフォルトの名無しさんNGNG
それはそうとC++とRubyをどう使い分けてんだろう
0894デフォルトの名無しさんNGNG
使い分けるも何も、C++とperlぐらいしか使える言語がありません_| ̄|○
0895デフォルトの名無しさんNGNG
(自宅では)適材適所で、
C++, awk, sed, csh, sh, JavaScript
を使い分けてます。
0896デフォルトの名無しさんNGNG
>>885
継承しなくてもグローバルにtemplate<typename T> operator [](std::set<T> Set, std::size_t n)ってできなかったっけ?
これができるんだったらtemplate<typename T> operator [](T Container, std::size_t n)にした方がいいような。
0897デフォルトの名無しさんNGNG
>>896
言いたかったのは
>ただライブラリはそののまま使わなくてもいいのですよ
です
継承はまぁ例です
ちなみにグローバルにoperator []は定義できませんよ
0898デフォルトの名無しさんNGNG
Ruby以外の言語はkぜうんぶくそ!
0899デフォルトの名無しさんNGNG
るびぃいいいいいいいいいいいいいいいいいいいいいいいい
0900デフォルトの名無しさんNGNG
#include <iterator>してadvance()使え。
0901883NGNG
遅くなってすいません。
参考になりました。ひとまずiterator使うのに慣れるようにします。
ありがとうございました。
0902デフォルトの名無しさんNGNG
そろそろ1000とりはじめるか
0903デフォルトの名無しさんNGNG
この早漏めがっ!!
0904デフォルトの名無しさんNGNG
STLの ofstreamで クラスオブジェクトを丸ごとバイナリファイルに保存したいんですが、
そのクラスにvectorのメンバ変数が存在します。

このままだと普通に保存できないんですが、どうしたらいいんでしょうか?
このvector変数はprivateになってます。
0905デフォルトの名無しさんNGNG
>>904
シリアライズ/デシリアライズ処理を自分で書く
0906デフォルトの名無しさんNGNG
>>905 ありがとうございました
0907デフォルトの名無しさんNGNG
次の方どうぞ
0908お願いしますNGNG
どなたか↓これに答えてあげてください。。。
http://pc5.2ch.net/test/read.cgi/tech/1101473340/86
0909デフォルトの名無しさんNGNG
>>908
本当に
int& c = counter[*it];
で落ちてるの?
if (counter.find(*it) == counter.end()) {
counter.insert(ValueCounter::value_type(*it, 0));
}
いれて動くからといって原因がここだとは限らないよ

ちなみにg++では正常に動いているように見える
0910908NGNG
>>909
ええ、たしかにそこで落ちました。
詳しくいいますと、map.insert() の実装のツリーの中で落ちました。

以前は元のままでも VC6 で動作したのですが、
プログラムを複雑にしているうちに、
そこでエラーが発生したんです。
VC6 のバグではないかなとも思うのですが。。
0911デフォルトの名無しさんNGNG
処理系のバグと自分のバグと…
確率ととしては(以下省略いたします
0912デフォルトの名無しさんNGNG
VC6+STL → OTL
0913デフォルトの名無しさんNGNG
>>912
OTL ってなんですか?
0914デフォルトの名無しさんNGNG
OTLと書いて「窓から投げ捨てろ」と読む。
0915デフォルトの名無しさんNGNG
なんお略語ですか?
0916デフォルトの名無しさんNGNG
Old fart Template Library
0917デフォルトの名無しさんNGNG
>>913
O=頭
T=腕
L=足

顔文字というか体文字?
0918デフォルトの名無しさんNGNG
普通にtrueが出力されるがなぁ。

template<typename Cont>
typename Cont::value_type ModeAverage(const Cont& cont)
{
  typedef std::map<typename Cont::value_type, int> ValueCounter;
  ValueCounter counter;

  int maxFreq(0);
  for (typename Cont::const_iterator it = cont.begin(); it != cont.end(); ++it)
    maxFreq = std::max(maxFreq, ++counter[*it]);

  typename Cont::value_type sum(0);
  int sumCount = 0;
  for (typename ValueCounter::const_iterator it = counter.begin(); it != counter.end(); ++it)
    if (it->second == maxFreq)
    {
      sum += it->first;
      ++sumCount;
    }

  return sum / sumCount;
}

int main()
{
  double data[] = {2.0, 1.0, 2.0, 5.0, 3.0, 4.0, 5.0, 2.0, 5.0, 4.0};
  std::vector<double> v(data, data + sizeof(data) / sizeof(data[0]));
  std::cout << std::boolalpha << (ModeAverage(v) == (2.0 + 5.0) / 2) << std::endl;
}
0919デフォルトの名無しさんNGNG
kuzuOre Template Library
0920デフォルトの名無しさんNGNG
vectorの代入で質問があります。

vector<MyClass*> v1, v2;
v1 = v2;
はコンパイルを通るのですが

vector<const MyClass*> v1;
vector<MyClass*> v2;
v1 = v2;
だとコンパイルを通りません。

もちろんassignメソッドなどを使ってコピーするなりすれば値のコピーはできるのですが
それだと関数の引数がconstになっている場合などはconstの一時変数を作ってコピーを
行った後でその変数を引数として渡すというような処理が必要になります。

上記のような場合やdoubleのvectorにintのvectorを代入したいといった場合は
どのような処理をするのが望ましいのでしょうか?
0921デフォルトの名無しさんNGNG
for文でインデックスを回しながら代入していくのがいいんじゃない?
0922920NGNG
>>921
説明不足ですみません。

vector<MyClass*> vec;
MyClass *obj = new MyClass();
vec.push_back( obj );
のようになっているとして、上記の変数vecを

void func(const vector<const MyClass*> &);
のような内部でvectorの要素のオブジェクトの変更を行わない関数の引数として

func( vec );
のように使用するとコンパイルができない。
という趣旨の質問です。

0923デフォルトの名無しさんNGNG
そりゃあなた、vector<const MyClass*>とvector<MyClass*>は
まったく違う型だから、代入とかコピーとかできませんよ。

別の型が格納されたコンテナ間のコピーをするための
テンプレート関数でも書けばどう?
0924デフォルトの名無しさんNGNG
>>922
正攻法 func(vector<const MyClass*>(vec.begin(), vec.end()));
キャストfunc(reinterpret_cast<vector<const MyClass*>&>(vec));
何度もやるのならこういうことするinline関数を書けば良いさ。
0925920NGNG
>>923
なるほど。違う型の扱いになるんですか。
const char*にchar*が代入できるのと同じ感覚で代入できるのかと思ってました。
勉強になりました。

>>924
これだと一時変数を作ったりしないで望んだ動作ができそうです。
アドバイスありがとうございました。
0926デフォルトの名無しさんNGNG
double* data は数値データの配列とします。
この中から最大値を求めるには STL 的にスマートに書くとどうなるでしょうか?
data に格納されているサイズは int data_size としてあらかじめ分かっています。
よろしくお願いします。
0927デフォルトの名無しさんNGNG
max_element
0928デフォルトの名無しさんNGNG
std::max_element(data, data+data_size);
0929デフォルトの名無しさんNGNG
>>927 >>928
すいません、有難うございます。
data を含むコンテナを生成して、そこからイテレータを作らないといけないのかな、
と思っていたのですが、ポインタはそのままイテレータとして使えるのですね。
0930デフォルトの名無しさんNGNG
質問です。
stlのstringを使っているのですが
まだ、使い慣れなくて
標準関数のstrstrとかstrcmpとか
色々と標準関数と合わせての使用が多くなっているのですが、
stringの仕様がよくわからないもので値を受け取るときなど
いちいち

char temp[256];
memset(temp,0,sizeof(temp));
strncat(temp,(char*)temp_str.c_str(),5);
string dir = temp;

とかやっております。
なにか文字列関数を使うたびにこんなことやっておりますが
実際はどう使ったらいいものなのでしょうか?
0931デフォルトの名無しさんNGNG
substr
operator=
0932デフォルトの名無しさんNGNG
>>930
C++標準ライブラリ、チュートリアル&リファレンス
http://www.amazon.co.jp/exec/obidos/ASIN/4756137156/249-9185395-5013104
をお勧めする。
但し現在は品切れ中だそうだが。こんないい本は早く増刷して欲しい。
0933デフォルトの名無しさんNGNG
std::stringはSTLじゃない。
とっととstd::stringの使い方を覚えろ。
0934デフォルトの名無しさんNGNG
>>930
一文が長すぎる。しかも、「が」が多すぎる。文章は短くなるように心がけた方が伝わりやすい。
それはさておき、memset()してからstrncat()なんてダメすぎ。
256なんてマジックナンバーが出てくる辺りもどうしようもない。
C++使いならせめて、このくらいは書けないと。
char * temp = new char[temp_str.size()];
strcpy(temp, const_cast<char *>(temp_str.c_str()));
string dir = temp;
delete[] temp;

#あ、この場合5文字で制限するのが目的ならこれでもいいか。
char temp[6];
sprintf(temp, "%.5s", temp_str.c_str());
string dir = temp;
0935デフォルトの名無しさんNGNG
>>C++使いならせめて

( ´,_ゝ`)プッ。噴いたじゃねーか。
0936デフォルトの名無しさんNGNG
>>934
…std::basic_string<>::copy()は何のためにあるのかと。
0937デフォルトの名無しさんNGNG
みなさん色々とアドバイスありがとうございます。

とりあえずですね、
文字列を受け取るのに
一旦、char temp[256]とかにうつしてからstring dirに格納するという
動作がかなりバグの元になっているのでなんとかしたいのですが
どうにかならないものでしょうか?
できればプログラムからchar型での文字列の扱いを無くしたいと考えております。
0938デフォルトの名無しさんNGNG
temp_strっていうstringから最初の5文字をdirに移せば良いんですか?

dir.assign(temp_str.begin(), temp_str.begin() + 5);

こういうことですか?
0939デフォルトの名無しさんNGNG
とりあえずな、ググれば日本語のリファレンスぐらい出てくるわけよ。
http://www.wakhok.ac.jp/~sumi/stl/
0940デフォルトの名無しさんNGNG
>>938
いえ、Win32の関数からも文字列を取得したいときがあるので
関数の引数から直接値を取得したいということです。

例えばstrcat(strcatはstring使ってるときは必要無いですが)の
第一引数から取得できる文字列を直接stringに格納したいということです。
0941デフォルトの名無しさんNGNG
std::stringにはnull終端のC文字列を代入できます。
char c[256];
// ...cに何かする。
std::string s = c; // OK!
0942デフォルトの名無しさんNGNG
だから256なんてマジックナンバーを(以下略
0943デフォルトの名無しさんNGNG
for (;;) {
std::stirng buff;
getline(cin, buff);
if (!cin.good()) break;
}

とか

int c;
std::stirng buff;
while ((c = getchar()) != EOF) buff += char(c);
0944デフォルトの名無しさんNGNG
>>943
std::string buff, temp;
while (std::getline(cin, temp)) buff += temp;
0945デフォルトの名無しさんNGNG
>>940
>いえ、Win32の関数からも文字列を取得したいときがあるので
>関数の引数から直接値を取得したいということです。
「直接」は不可能でしょう
例えば以下のようなアダプタを使うと生の文字列は抹殺できるかも

#include <iostream>
#include <string>
using namespace std;
template <size_t SIZE>
class Adapt_To_Char_Array {
char tmp [SIZE];
string ⌖
Adapt_To_Char_Array (const Adapt_To_Char_Array &p);
Adapt_To_Char_Array &operator = (const Adapt_To_Char_Array &p);
public:
Adapt_To_Char_Array (string &p): target (p) {strcpy (&tmp [0], target.c_str ());}
~Adapt_To_Char_Array () {target.assign (tmp);}
operator char * () {return tmp;}
};
int main () {
char c0 [] = "hoge";
string s0 ("hage");
cout << s0 << endl;
strcat (Adapt_To_Char_Array <100> (s0), c0);
cout << s0 << endl;
return 0;
}
0946945NGNG
これだとstrcatが返す値が危険か
う〜む
0947デフォルトの名無しさんNGNG
>>941-
みんな>940の意味がわかるのか。すげーな。
漏れは意味わかんなかったよ。
0948デフォルトの名無しさんNGNG
>>942
Win32限定でスレ違いっぽくて申し訳ないんだけれども、
GetPrivateProfileStringとか使いたいときはどうしてる?
マジックナンバー使わないとどうしようもないと思うんだ
けれども。
0949デフォルトの名無しさんNGNG
>>948
nSize = 1 からはじめて、戻り値が nSize - 2 以下になるまで nSize を倍倍にしながらループ。
0950デフォルトの名無しさんNGNG
うわっ。最悪。
0951デフォルトの名無しさんNGNG
>>950
nSize = 256 からはじめれば満足か?
0952デフォルトの名無しさんNGNG
初期値ではなくアルゴリズムが最悪
0953デフォルトの名無しさんNGNG
>>952
じゃぁどうすればもうすこしマシになるんだ?
0954デフォルトの名無しさんNGNG
>>948
恐らくは、WritePrivateProfileStringなどで書き出すんだろうから必要な長さは充分予測可能では?
その長さを初期値としてGetPrivateProfileStringを呼び出し、戻り値を得る。その戻り値によって
切り詰められたことが判った場合に再度呼ぶか切り詰められたままかエラー処理するかは仕様次第。
0955デフォルトの名無しさんNGNG
>952
俺も952がどうやってるのか興味ある。煽りじゃない。教えてくれ
0956デフォルトの名無しさんNGNG
マジックナンバーが「絶対に」駄目とか言う奴は馬鹿に決まってるだろ。
放っとけよ。
0957デフォルトの名無しさんNGNG
誰か絶対にダメなんていったのか?
0958デフォルトの名無しさんNGNG
>>957
>>934あたりがそういう意味のことを言ってるな
0959デフォルトの名無しさんNGNG
ん?
>934が言っているのはそのケース限定では?
0960デフォルトの名無しさんNGNG
スレ違いうざい。
くだ質とか初心者に行けよ。
0961デフォルトの名無しさんNGNG
なんでstd::stringがスレ違いなの?
0962デフォルトの名無しさんNGNG
マジックナンバーがどうとか言ってるのがスレ違いなんだろ
0963デフォルトの名無しさんNGNG
俺の気に入らない奴の話は全部スレ違い
お前らなんか消えちゃえ
0964デフォルトの名無しさんNGNG
ぷ
0965デフォルトの名無しさんNGNG
>>961
STL じゃないからでは?
0966デフォルトの名無しさんNGNG
>>965
君の言うSTLの定義とは?
0967デフォルトの名無しさんNGNG
std::stringがテンプレートじゃないなんて言うなよ w
0968デフォルトの名無しさんNGNG
マジックナンバーなんてconstで名前をつければいいだけ。
0969デフォルトの名無しさんNGNG
const NUM_256 = 256;
0970デフォルトの名無しさんNGNG
半年後
const NUM_256 = 512;
0971デフォルトの名無しさんNGNG
>>966-967
STLはコンテナやそれに対するアルゴリズムの部分。
文字列は違う。
STL∈標準ライブラリでSTL=標準ライブラリじゃないぞ。
0972デフォルトの名無しさんNGNG
>>971
std::stringだってchar型を格納するコンテナだろ。
0973デフォルトの名無しさんNGNG
>>972
格納するデータの型が固定されてるものは普通コンテナとは呼ばない。
0974デフォルトの名無しさんNGNG
>>973
おいおい。まさに>>967だ。
std::stringはstd::basic_string<char>のシノニムだぞ。
0975デフォルトの名無しさんNGNG
何を勘違いしているのか知らないが、STL ってのは '94 に
C++ 標準ライブラリとして採用された汎用コンテナと汎用アルゴリズムを
指すもの。
string だの iostream だのは含まれないし、ある特定の条件を満たせば
STL と呼べる、って類の話じゃないんだが。
0976デフォルトの名無しさんNGNG
ところでこんなのを発見
http://mentai.peko.2ch.net/prog/kako/965/965248105.html
0977デフォルトの名無しさんNGNG
>>974
なにがおいおいだか。

The C++ Programming Language, 3ed, p491.
"However, each (of built-in arrays, strings, valarrays, and bitsets)
lacks some aspect or other of the standard container interface, so
these "almost containers" are not completely interchangeable with
fully developed containers such as vector and list."
"However, basic_string does not provide as wide a selection of types
as elements."
0978デフォルトの名無しさんNGNG
C++標準ライブラリチュートリアル&リファレンスでも文字列はSTLの章に入ってないしな。
0979デフォルトの名無しさんNGNG
966の無知っぷりがあらわに
0980デフォルトの名無しさんNGNG
>>977
それは日本語版のP567だな。都合のいいとこだけ抜き出すなよ。w

---------------------------
17.5 "おおよそコンテナ"
組み込み配列、string、valarray、bitsetは、要素を保持する型であり、
多くの用途でコンテナとみなすことができる。しかし、これらは標準コン
テナインターフェイスが提供するあれこれの機能を持たないので、
これら”おおよそ”コンテナは、vectorやlistといった完全なコンテナと
完全に交換可能な形で使うことはできない。

17.5.1 string
basic_stringは、添字演算子、ランダムアクセス反復子のほか、コンテナが
持つ便利な記述形式の大半を提供する。しかし、basic_stringで使える要素型
の選択肢は狭い。basic_stringは文字列としての用途に最適化されており、
コンテナとは大きく異なる形で使われることが多い。
---------------------------

いずれにせよ、型の固定云々は関係ないが。
0981デフォルトの名無しさんNGNG
>>980
> いずれにせよ、型の固定云々は関係ないが。
書いてあるよ。
「しかし、basic_stringで使える要素型の選択肢は狭い。」
この要素の型の制約がきついから(それだけじゃないが)、完全なコンテナになりきれない
って文脈で書いてあるんだよ。
0982デフォルトの名無しさんNGNG
同じく、std::vector<bool>も「STLのコンテナになりきれていない」から
STLのコンテナではないんだっけか。
0983デフォルトの名無しさんNGNG
それはともかく次スレ。
0984デフォルトの名無しさんNGNG
>>983
いらね
C++相談室と分ける合理的な理由ある?
0985デフォルトの名無しさんNGNG
ない
0986デフォルトの名無しさんNGNG
立てようか?今から風呂入ってくるから、立てろという意見の方が多かったら立てる。
立てるなというレスが多かったら放置。
0987デフォルトの名無しさんNGNG
立てるな
重複すれ多すぎ
0988デフォルトの名無しさんNGNG
>>987
今風呂からあがりました。
わかりました。放置します。
0989デフォルトの名無しさんNGNG
具体的にstringってどこら辺がコンテナじゃないんですか?
0990デフォルトの名無しさんNGNG
Effective STL
0991989NGNG
すいません.ざっと見渡してみましたがstringがコンテナでないという
記述が見つからなかったです.具体的にどの部分ですか?
0992デフォルトの名無しさんNGNG
>>981
そうかな?

stringはおおよその意味でコンテナとは言えるが
標準コンテナのインターフェイスを完全に備えているわけではないので
完全なコンテナとは言えない。

stringはほぼコンテナではあるが、文字列としての機能に最適化されているために
完全なコンテナ(vectorとか)と同じような使い方をされることはない。

つまりstringが完全なコンテナでない理由は
「標準コンテナのインターフェイスを完全に備えているわけではない」
と云う意味に理解したけど。
0993デフォルトの名無しさんNGNG
ContainerConceptに合致するかどうかで決着つけてはどうか?
0994デフォルトの名無しさんNGNG
>993
Container Conceptのモデルかどうかならモデルになるんじゃないですかね?
stringが他のコンテナのモデルと違うのは,(参照カウント実装の可能性に伴う)
イテレータ・参照・ポインタの無効化のセマンティクスの特殊性と
operator[]等が返すreferenceが真の参照型かどうかぐらいだと思うのですが,
Container Conceptではそれらについては制限していないですから.

Forward Container Conceptのモデルかどうかについては
char_traitsでoperator==等のセマンティクスを変えられるので微妙なような・・・.
http://www.sgi.com/tech/stl/basic_string.html
では,SequenceとRandom Access Containerのモデルだと言ってますけど.
0995デフォルトの名無しさんNGNG
この2つへ吸収ということで次スレは作らない。

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

C++相談室 part38
http://pc5.2ch.net/test/read.cgi/tech/1101473340/l50
0996デフォルトの名無しさんNGNG
STLの一般的な質問は後者で、とりわけtemplate<>についてが前者かな。

BOOSTを語れゴラァ
http://pc5.2ch.net/test/read.cgi/tech/1091198276/
もね。
0997デフォルトの名無しさんNGNG
以後、STLスレを立てるやつは、

STLが使えない→STLは標準C++の一部ではない!

という思考をするDQNとみなす
0998デフォルトの名無しさんNGNG
う
0999デフォルトの名無しさんNGNG
ん
1000デフォルトの名無しさんNGNG
も
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。