【C++】STL(Standard Template Library)相談室
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
NGNG0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNG0004デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNG0006デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNG【C++】template 統合スレ -- Part5
http://pc5.2ch.net/test/read.cgi/tech/1091522597/l50
---- 糸冬了 ----
0008デフォルトの名無しさん
NGNGでないとBoostまで一体化になってしまう。
0009デフォルトの名無しさん
NGNG0010デフォルトの名無しさん
NGNG0011デフォルトの名無しさん
NGNGそんなものがtemplateスレを埋めたら
PerlスレをCGIの話で埋めるようなもの。
0012デフォルトの名無しさん
NGNG0013デフォルトの名無しさん
NGNG0014デフォルトの名無しさん
NGNGそれは本質じゃねー
0015デフォルトの名無しさん
NGNG気軽に使えるツールセットであるから便利なんだ。
0016デフォルトの名無しさん
NGNG標準かどうか気にしなければいい
0017デフォルトの名無しさん
NGNG0018デフォルトの名無しさん
NGNGStandard Container Libraryとかに名前変えたらどうよ?
0019デフォルトの名無しさん
NGNG個人で使うだけなら標準かどうかなんて気にしなくていいけどな
0020デフォルトの名無しさん
NGNGSTLを1文字書き換えたOTLは形になるけどSCL→OCLは形になっていないので却下。
0021デフォルトの名無しさん
NGNGSTLに含まれるのはコンテナだけじゃないから却下
0022デフォルトの名無しさん
NGNG0023デフォルトの名無しさん
NGNGまだ始めたばかりで、便利さがよくわからないのですが
0024デフォルトの名無しさん
NGNGバイナリのサイズを増やしたいときとか、すごく便利。
ほかのライブラリじゃ絶対無理。
0025デフォルトの名無しさん
NGNG0026デフォルトの名無しさん
NGNGなんせサイズが10倍になるからな。
界王拳みたいなもんだ。
0027デフォルトの名無しさん
NGNG環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。
0028デフォルトの名無しさん
NGNGエレガント(いかにもC++っって感じのやつ)な方法ありませんか?
0029デフォルトの名無しさん
NGNGstring word = "電話コード 0120-123-[123]"
string::size_type pos = word.find("[");
とした場合、電話コードの"ー"の位置が返却されるようなのですが、
"["を正確に検索するにはどうすればよいのでしょうか?
0030デフォルトの名無しさん
NGNGプログラム界の長有名人のエビステーメーさんの書籍によると、
STLを使うことで、プログラムコードが100分の1になるそうです。
0031デフォルトの名無しさん
NGNGwstring word = L"電話コード 0120-123-[123]";
wstring::size_type pos = word.find("[");
0032>>29
NGNG神さま!レスありがとうございます。
ダブルコーテーションの前にLを付けると、どのような意味になるのでしょうか?
何度もすいません・・・
0033デフォルトの名無しさん
NGNGワイド文字列(多くの場合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デフォルトの名無しさん
NGNGstd::string str;
long n = reinterpret_cast<long>(str.c_str());
0035デフォルトの名無しさん
NGNGlong l (100);
string s (boost::lexical_cast <string> (l));
0037デフォルトの名無しさん
NGNG{
wstring ss2 = L"顧客コード";
cout << ss2.c_str() << endl;
getch();
return 0;
}
というプログラムコードを実行すると、
コンソールに次の表示されます。なぜ顧客コードと表示されないのでしょうか?
<コンソールの表示内容>
004800B2
0038デフォルトの名無しさん
NGNG0039デフォルトの名無しさん
NGNG0041デフォルトの名無しさん
NGNGそれよりも wstring に注目しろ
0042デフォルトの名無しさん
NGNGSTLを使うと、コードが100分の1になるって本当なんですかね?
職業プログラマの告白きぼんぬ!
0043デフォルトの名無しさん
NGNGこの差はいったい何なんだ・・・・
0044デフォルトの名無しさん
NGNG0045デフォルトの名無しさん
NGNG「この差」って何?C++にいろいろ機能が加わった事か?標準規格が固まってから
もう6年も立ってるぞ。そろそろ覚えろや。
0046デフォルトの名無しさん
NGNGSTL使わないコードがSTL使うようになると100分の1に減るのは
元のコードの99%がSTLと同等の内容で、残り1%がアプリケーションの場合。
STLの規模は全部合わせても1メガバイト程度だから、
アプリケーションのためのコードは最大で10キロバイト程度ということになる。
その程度の小規模プログラムなら増えた減ったは誤差の範囲になる。
STLのコンテナ系は数日で書ける規模だから
通常のプログラムでコードが100分の1になるのはありえない。
元のコードが冗長なゴミで埋め尽くされてるなら
STLによって100分の1に減らすこともできるかもしれないが、
それはあまりに異常な設計だから
STLを使えばコードが100分の1になるという一般論を導くことにはならない。
0047デフォルトの名無しさん
NGNG信じられん。
プロってすごいんだな。煽りじゃなく。
STLのアルゴリズム系についてはどうなの?
0048デフォルトの名無しさん
NGNGアルゴリズムも恐らく数日で書き切れると思います.
個人的な感覚ではコンテナに比べてアルゴリズムの方がだいぶ楽だと思います.
0049デフォルトの名無しさん
NGNG0050デフォルトの名無しさん
NGNGだから
STLはバッドノウハウも塊
0051デフォルトの名無しさん
NGNG例えば?
0052デフォルトの名無しさん
NGNG具体的な方法を、プログラムコードで教えてもらえたいのでっすが・・・
0053デフォルトの名無しさん
NGNGなわけないだろ。
0054デフォルトの名無しさん
NGNGもちろん>>48はネタに決まってる。言うだけタダだもんねえ。
0055デフォルトの名無しさん
NGNGiteratorで触れるタイプは一日くらいだろう。
一日半もあれば確実。iteratorでさらに一日。
コンテナ全部を数日でできない人は何に時間をかけてるんだ?
0056デフォルトの名無しさん
NGNG嘘もここまで来ると立派なもんだ。
0057デフォルトの名無しさん
NGNGvectorあたりは半日で書けるだろ。
0058デフォルトの名無しさん
NGNGテスト
0059デフォルトの名無しさん
NGNGいっそ辞職なさい
あれは普段普通に書くtemplate classの最低限の規模です
0060デフォルトの名無しさん
NGNG0061デフォルトの名無しさん
NGNGmaxに一日
medianに三日かかる人だって立派に生きてます
0062デフォルトの名無しさん
NGNGもちろんパフォーマンス的なチューニングは完全なんだろうな。
ただ書くってだけなら俺にもできるが、遅かったら作る事自体が意味がない。
0063デフォルトの名無しさん
NGNG詭弁でたー
0064デフォルトの名無しさん
NGNGSTLのdequeはパフォーマンス的によほど優れてるということですか。
で、それはなぜ?
0065デフォルトの名無しさん
NGNGもちろんSTL dequeのパフォーマンス的なチューニングは完全なんだろうな?
0066デフォルトの名無しさん
NGNGvector,list,deque,map,set,multimap,multiset (queue,stack
これらを数日でねぇ。
テスト等の手間も考えての発言とは思えないな。
ま、口だけならなんとでもいえるからなw
2ch上では優越感に浸らしてあげようじゃないのw
すごいでちゅねーw
0067デフォルトの名無しさん
NGNGおまえならそれぞれ何日かけて作る?
0068デフォルトの名無しさん
NGNG0069デフォルトの名無しさん
NGNG20年ほど前のCでどろどろ書いてた時代じゃ
STLで書かれてたような基本アルゴリズムは
毎日大量に書かれてたし、
それから20年間の経験によってまとめられた設計案を
いざSTLのような汎用ライブラリーとして書いてみろと言われたら
それこそ数日もかからない。
テスト?何十年も親しんできた類似コードを
また同じように書き直しただけだ。
テストするのに時間かかるわけがない。
hello worldのテストに1ヶ月かけたい人から見れば不安だろうけどな。
0070デフォルトの名無しさん
NGNG0071デフォルトの名無しさん
NGNG>STLで書かれてたような基本アルゴリズムは
>毎日大量に書かれてたし、
そんなに大量にかかれていたんなら、100分の1になりそうだな
0072デフォルトの名無しさん
NGNGできる奴は、できてあたりまえ、できないはずがない、と思い込んでるし。
できない奴は、できなくてあたりまえ、できるはずがない、と思い込んでるし。
レベルが1つずれるだけでこういう認識の違いが生まれるのに、
一番上と一番下の距離は更に遠い。
そいつらの間で起きるできるできない論争は見てて笑える。
0073デフォルトの名無しさん
NGNG自然言語はほとんど使わない生活を十年以上続けてる特殊な人達は
ネイティブスピーカーになってるので、
その人達の数日と一般プログラマの数日を一緒にしてはいけない。
0074デフォルトの名無しさん
NGNGできる発言ほど当てにはならないってことだ。
見ててマジわらえるw
0075デフォルトの名無しさん
NGNG0076デフォルトの名無しさん
NGNGだったら1/100どころの話じゃないね
0077デフォルトの名無しさん
NGNGテストもなしで誰も使わないだろうけど
dequeue半日でできるとか言ってるスーパープログラマーは
boostに参加して腕を奮ってくださいな
0078デフォルトの名無しさん
NGNG作ってどこかで晒してみろよ。
それもしないで信じろという方が無理だ。
0079デフォルトの名無しさん
NGNG0080デフォルトの名無しさん
NGNG0081デフォルトの名無しさん
NGNG小さい頃に教えられなかった?「嘘つきは泥棒の始まり」って。( ´,_ゝ`)プッ
0082デフォルトの名無しさん
NGNG0083デフォルトの名無しさん
NGNGどうせ同じ物を作れると言っても見本を見ながらしか書けない
0084デフォルトの名無しさん
NGNGお前以外に誰が低レベルと言ってたっけ?
0085デフォルトの名無しさん
NGNGこのサイズだと速い奴なら1時間から数時間、
遅い奴なら数日から数カ月か
0086デフォルトの名無しさん
NGNG徹底的に無駄を除去して1バイト単位で削ればどこまで
小さくできるか。
0087デフォルトの名無しさん
NGNGやっぱりメンバ関数とかコンストラクタはstd::dequeに完全準拠が条件?
0088デフォルトの名無しさん
NGNGstlportでも古いRWでも1500行はあるように見えるが
deque
(どっちもalgorithmとかiterator多用で1lineが長い)
0089デフォルトの名無しさん
NGNGそれだとただのコピペ書き換え合戦なので、
多少の独自性はいいんじゃないかな。
ただしiteratorは使えないと意味が無いので必須条件。
0090デフォルトの名無しさん
NGNGインターフェースは同じじゃなきゃ意味無いだろ。
内部実装はどうでもいいけど。
0091デフォルトの名無しさん
NGNG日本語でお願い
0092デフォルトの名無しさん
NGNG倒置法はならったかな?
0093デフォルトの名無しさん
NGNG文において、普通の語順と逆にして語句を配置し修辞上の効果をあげる表現方法。「出た、出た、月が」「進もう、未来へ」の類。
0094デフォルトの名無しさん
NGNG0095デフォルトの名無しさん
NGNG体言止めと倒置法の併用だな。小学生高学年くらいで習ったっけか?
0096デフォルトの名無しさん
NGNG0097デフォルトの名無しさん
NGNGの末尾「である」を省略したのなら体言止め
0098デフォルトの名無しさん
NGNG"デック"だよ…頼むよ…
> コンテナ要件を厳密に満たす必要ない
それはゴミだ。
0099デフォルトの名無しさん
NGNGデキューでもいいじゃん
0100デフォルトの名無しさん
NGNGしか書けなさそう。
0101デフォルトの名無しさん
NGNGこれをチャーと呼んでもキャラと呼んでもいいのと一緒でしょ。
0102デフォルトの名無しさん
NGNG0103デフォルトの名無しさん
NGNGただの個人ページでは無いのですか?
0104デフォルトの名無しさん
NGNG0105デフォルトの名無しさん
NGNGhttp://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デフォルトの名無しさん
NGNGde-queue デキュー キューから出す。
両方の端からエンキュー・デキュー出来るから"double ended" queue
# 専門用語なんて、そのカテゴリに凝り固まってるヲタどもの自己満足のためにしか存在価値がない、とか思ってる口か?
0107デフォルトの名無しさん
NGNG0108デフォルトの名無しさん
NGNG0109デフォルトの名無しさん
NGNG自演ですか?(・∀・)
011098
NGNGhttp://www.sgi.com/tech/stl/Deque.html
これでいいですか? 暇な人はKnuth参照してねん。
0111デフォルトの名無しさん
NGNGdequeを [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デフォルトの名無しさん
NGNG0113デフォルトの名無しさん
NGNG"deque"を"dequeue"って表記している本って例えばどんな糞本?
0114デフォルトの名無しさん
NGNG0115デフォルトの名無しさん
NGNGdequeをdequeueと書く理由は、dequeと書いてしまうと、std::dequeの機能を
全部取り入れたコンテナを自作するという意味になってしまうので、dequeue
と最初から書いておく事によって、後から「これ違うじゃん」と突っ込みを入れ
られても、「だってdequeueだよ。dequeじゃないじゃん」と言い逃れできる余地
を残しておくためだろ。
0116デフォルトの名無しさん
NGNG0117デフォルトの名無しさん
NGNGhttp://www.google.com/search?q=dequeue+%22double+ended+queue%22&lr=
0118デフォルトの名無しさん
NGNGそれがstd::dequeとどんな関係があるんだよヴォケ
0119デフォルトの名無しさん
NGNG今のstd::dequeに新規に機能追加するとしたら何でしょうかね?
個人的にはbuffer拡張とかブロックサイズとかがポリシーになってたらなぁと思ったり
0120デフォルトの名無しさん
NGNG0121デフォルトの名無しさん
NGNGいや,アロケーションの話ではなくてstd::dequeは
内部のバッファをreserveしないといけないはずなので,
そのreserveに関するポリシーがあっても良さげかなと思ったんですよ.
vectorも同じですけれど.
0122デフォルトの名無しさん
NGNGどうでもいいけどどっかに晒してみろよ。それまでは虚言と同じだから。
0123デフォルトの名無しさん
NGNG0124デフォルトの名無しさん
NGNG0125デフォルトの名無しさん
NGNGpoolでも使えばいいが。
0126デフォルトの名無しさん
NGNGデータベースアクセスクラスでいいものはありませんか?
Linuxでやりたいので,MFCはなしでアドバイスお願いします。
0127デフォルトの名無しさん
NGNG0128デフォルトの名無しさん
NGNG悪い思い出でも?
0129デフォルトの名無しさん
NGNGMONOを入れたらADO.NETが使えるらしいよ。
0130デフォルトの名無しさん
NGNGsourceforgeやfreshmeatにいくつか転がってるので
どれでも好きなものを
0131>>52
NGNG0132デフォルトの名無しさん
NGNG0133>>52
NGNGGCCもってないんです・・・
0134デフォルトの名無しさん
NGNGインストールすればいいだろ。
0135132
NGNGこのクズが!ここで見ろ
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc%2b%2b-v3/testsuite/
0136名前は開発中のものです。
NGNGおいこら! DLできねえぞチョン公!
0137デフォルトの名無しさん
NGNGあれ、WWWで公開されてていいものなんか知らんが。
0139デフォルトの名無しさん
NGNG以下の???に何をいれたらいいのかわかりません。
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;
}
0141デフォルトの名無しさん
NGNG↓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どうすればよいかご存知の方いますか?
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: 構文エラー : ';' が '{' の前に必要です。
0143142
NGNG0144>>139
NGNGひょえ〜〜〜〜〜〜
難しすぎ!!
wstringからstringに変換するだけでこんなにコード書かなきゃいけないのか・・・・
こんなのをイメージしてたのにぃ・・・・
string = "あしたははれだ";
wstring wstr = codecvt.wstringTOstring(str);
0145デフォルトの名無しさん
NGNG一見難しく見えるが、一番最初にくっついてるのは変数の初期化だし、
一番最後にくっついてるのは結果出力だし。
肝の部分は
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デフォルトの名無しさん
NGNGMSDNのサンプルは質の低いのが多いから。
(多くをアルバイトが書いているらしい)
wstringstream使えな。
0147デフォルトの名無しさん
NGNG0148デフォルトの名無しさん
NGNG詳しく説明して下さい
0150デフォルトの名無しさん
NGNG特にライブラリはプラウガがやってるしなあ。
100%適合の数少ない一つでしょ、ダンキンのライブラリ。
0151デフォルトの名無しさん
NGNG0152デフォルトの名無しさん
NGNG使えないロートルだな。
0153デフォルトの名無しさん
NGNGUSES_CONVERSION;
MessageBoxA( W2A(L"今日はあめだ") );
0154デフォルトの名無しさん
NGNG結論からいけばそうだろうけど
でも彼はcodecvを使ってやりたかったのでしょう。
0155デフォルトの名無しさん
NGNGスレ違いで申し訳ないのですが、よかったらでいいのですが、
そういった記事(情報)はどうやって得るのか教えていただけないですか?
MSDNのホットトピックが配信されるようなMSのMLみたいなものがあるのですか?
0156デフォルトの名無しさん
NGNGこういうのはどうか?
#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 <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<char,char>でN個のデータを確保した場合、2*N byteでいいですか?
どうも使用メモリ量が予想よりも多い気がします。
0159デフォルトの名無しさん
NGNGそんなもん実装次第だがポインタ1個分は加わるだろ
0160デフォルトの名無しさん
NGNGpointerだから1個につき4バイトですかね。漏れの場合は予想より3倍近くいってるのでびっくりしたわけです。
実装がまずいのかな。ちょっと見直してみます。
0161デフォルトの名無しさん
NGNGお前の頭が一番まずいよ
0162デフォルトの名無しさん
NGNG0163デフォルトの名無しさん
NGNGポインタ3つ(左右の子と親)と色のenumが余計に付いていると
予想するのが妥当ですかね?ま,実装読めば良い話なんですが.
0164デフォルトの名無しさん
NGNGRB-Treeの場合、色をポインタに埋め込んで持っていて
領域を特別確保していないことが多いとよく聞く。少なくとも
手元の実装ではそうなっていた。
0165デフォルトの名無しさん
NGNG( ・∀・)つ〃∩ ヘェーヘェーヘェー.っていうか良くやる手ですよね.
VC++7.1ではポインタ3つ+char2つ余分に付いてました.
とりあえず最低限ポインタ3つ(iteratorの実装のために親へのポインタも不可避なはず)
は余分に使うってことですね.
0166デフォルトの名無しさん
NGNGsizeof関数で取得できます。
例えばintなら、
int i;
sizeof(i);
0167デフォルトの名無しさん
NGNG> sizeof関数
> sizeof関数
0168デフォルトの名無しさん
NGNG0169デフォルトの名無しさん
NGNG0170デフォルトの名無しさん
NGNG> return関数
> return関数
0171デフォルトの名無しさん
NGNGtypeid関数 throw関数
とかも増えたんだろうな。
0172デフォルトの名無しさん
NGNG0173デフォルトの名無しさん
NGNGint関数もだろ。
0174デフォルトの名無しさん
NGNG0175デフォルトの名無しさん
NGNGstringはvectorと違って、メモリレイアウトは配列コンパチじゃないぞ
0176デフォルトの名無しさん
NGNGそりゃ知らなかった。
#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 <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配列互換じゃないなら、basic_string::data()をどう説明するの?
具体的に、シリアルになってない実装のSTLとかあるの?
(・∀・)ニヤニヤ
0179デフォルトの名無しさん
NGNGより正確に表現するなら「配列互換であることが標準のどこにも保証されていない」.
実際,シリアルになっていない実装は少ないと思いますが,
それはあくまで多くの実装が「たまたま」シリアルな実装になっているだけでしょう.
ベンダの裁量次第では例えば配列互換でない実装をしておいて,data()が呼ばれたときに
シリアルに再配置してその先頭ポインタを返す,なんて実装をされていても
文句は言えないということです.
0180デフォルトの名無しさん
NGNG>>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内部で断片化されたデータを使い続けるような2度手間な実装だったら、ある意味凄い。
・・・つか、イラネ。
0182デフォルトの名無しさん
NGNGMFCのCStringみたいに生バッファアクセスを許可して欲しいところだ。
最大の問題はreserve()がVCとgccで挙動が違うところだと思う。
0183デフォルトの名無しさん
NGNG「規格に関係なく書いたコードでも動けばよい」というような
態度は周りが迷惑する。
0184デフォルトの名無しさん
NGNG迷惑ってんなら、「規格」も周りに迷惑をかけまくってるだろ。
とりあえず、論より証拠で不具合が発生するSTLベンダ名をうpしてくれ。あるんだろ?
話はそれから。
0186デフォルトの名無しさん
NGNG君の常識はみんなの非常識
0187デフォルトの名無しさん
NGNG可哀想なくらい頭悪!
0188デフォルトの名無しさん
NGNG君の論法は「国の法律は俺にとっては都合が悪いからどんどん変えてくれ」
と言っているのと全く同じだね。
(・∀・)ニヤニヤ
0189デフォルトの名無しさん
NGNG君はまず国語を理解した方がいいね。
0190デフォルトの名無しさん
NGNGおやおや姦国人ですか?日本語が読めないとは。
0191デフォルトの名無しさん
NGNG実際に体験したからご立派なこと言ってんだよね?>>178
ちゃんと報告して下さいね(プゲラ
0192デフォルトの名無しさん
NGNG(プゲラ
(プゲラ
0193デフォルトの名無しさん
NGNG>>180 嫁。
0194デフォルトの名無しさん
NGNGvector以外を C API に直接渡したり、直にバッファをいじったりするコードは
移植性が下がる
0195デフォルトの名無しさん
NGNG0196デフォルトの名無しさん
NGNG0197デフォルトの名無しさん
NGNG現在時期C++に向けての修正案で保証するべきという用件があがっているだけで。
0198デフォルトの名無しさん
NGNGサイズが可変であるvectorの連続性が保証されるというのも不思議な話だ。
0199デフォルトの名無しさん
NGNG0200デフォルトの名無しさん
NGNG0201デフォルトの名無しさん
NGNG1つのサイズがわずか1or2バイト
1つのサイズがわずか1or2バイト
0202デフォルトの名無しさん
NGNGT array[N]; の連続性も不思議だと思うのかな。
0203デフォルトの名無しさん
NGNGいえ,保証されています.
ISO/IEC IS 14882:1998にvectorの連続性の保証を追加するという提案は
すでにTC(Technical Corrigenda:正誤表)として正式に受理されています.
要するにvectorの連続性の保証の記述が無かったのは単に誤植だという扱いです.
新しい版の規格書ではすでに修正されています.
http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#69
0205203
NGNG自分でもそう思いますw
0206デフォルトの名無しさん
NGNG0207デフォルトの名無しさん
NGNGと言えないんだ>>204のオタクは
騙り臭いし
0208デフォルトの名無しさん
NGNG204はテンプレだよ
0209デフォルトの名無しさん
NGNG0210デフォルトの名無しさん
NGNG標準
0211デフォルトの名無しさん
NGNGrbeginでとったiterator経由でeraseしようとしても失敗しちゃうのは仕様
ッスかね?
list<int> mylist;
mylist.push_back(1);
mylist.push_back(2);
mylist.push_back(3);
itr = mylist.rbegin();
mylist.erase(itr); // コンパイルエラー
0212デフォルトの名無しさん
NGNG0213デフォルトの名無しさん
NGNGrbegin()で返ってくるのはreverse_iteratorであってiteratorじゃない。
0214デフォルトの名無しさん
NGNG後ろ消したいんだったら空でないこと確かめて
list <int>::iterator itr (-- mylist.rbegin().base ());
か
list <int>::iterator itr (-- mylist.end ());
0215デフォルトの名無しさん
NGNGpop_back
(本題と外れてるけど)
0216デフォルトの名無しさん
NGNG0217デフォルトの名無しさん
NGNG0218デフォルトの名無しさん
NGNG0219デフォルトの名無しさん
NGNG0220デフォルトの名無しさん
NGNG0221デフォルトの名無しさん
NGNG0222デフォルトの名無しさん
NGNG0223デフォルトの名無しさん
NGNG0224デフォルトの名無しさん
NGNG0225デフォルトの名無しさん
NGNG0226デフォルトの名無しさん
NGNG恥ずかしい奴だなあ。偽証罪って裁判所内でしか関係ないぞ。
0227デフォルトの名無しさん
NGNG0228デフォルトの名無しさん
NGNG0229デフォルトの名無しさん
NGNG必死すぎ
0230デフォルトの名無しさん
NGNG国会に証人喚問された人も。
0231デフォルトの名無しさん
NGNG全くの板違いだが気になったので。
国会の証人喚問は法廷並みの扱いなので
ここでの嘘は偽証罪に問われる。
疑惑の政治家が証人喚問に呼ばれるのは
「記者会見で言ったことがここでも言える?
嘘だったら警察に捕まるよ〜ん」ってこと。
0232デフォルトの名無しさん
NGNGその話がSTLとどういう関係があるのか?
0233デフォルトの名無しさん
NGNGキーワードわかってんだからググれば?
0234デフォルトの名無しさん
NGNG2引数を1引数にするにはbind1stとかを使えばいいのですが。
別に自作してもたいした手間ではないのですがなんか・・・
0235デフォルトの名無しさん
NGNGない。
0236デフォルトの名無しさん
NGNG0238デフォルトの名無しさん
NGNGあ,でもここSTLスレだった・・・.
0239デフォルトの名無しさん
NGNGなんで最後が戻り値の型なんでしょう
最初にあった方が直感的だと思うけど・・・
0240デフォルトの名無しさん
NGNG0241デフォルトの名無しさん
NGNG俺もそう思た
確かLokiでは最初に戻値型があったような
0242デフォルトの名無しさん
NGNG0243今度はな、名前が…
NGNG0244デフォルトの名無しさん
NGNGもともと順序性あるのにわざわざキーワードにマップする意味なし
0245デフォルトの名無しさん
NGNGたまたまC++の構文がそうなっているだけのような気がするが。
0246デフォルトの名無しさん
NGNG0247デフォルトの名無しさん
NGNG0248デフォルトの名無しさん
NGNG0249デフォルトの名無しさん
NGNG0250デフォルトの名無しさん
NGNG0251デフォルトの名無しさん
NGNGfor (int i = 0; i < 3; ++i)
std::cout << dakedaga + 247 + 2 * i << std::endl;
0252デフォルトの名無しさん
NGNGのすべての要素と和はかっこよくかけませんかね?
forで回すのは無しねw
0253デフォルトの名無しさん
NGNG0254デフォルトの名無しさん
NGNG{
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>>254
ありがとうございます。
どちらもC++らしいかっこいいとおもいます。
ですが、>>254さんのはちょっと内容が僕にはヘビーなんで>>253さんので以降と思います。
ありがとうございました
0256デフォルトの名無しさん
NGNGそのまんまの記述が見つかるレベルだぞこれ。
ちゃんと本買ったほうがいいんじゃねえか?
0257デフォルトの名無しさん
NGNGboostでは無名関数が定義されていますので、こういうこともできますよ
int sum = 0;
std::for_each(data.begin(), data.end(), (sum += boost::lambda::_1) );
0258デフォルトの名無しさん
NGNG0259デフォルトの名無しさん
NGNG確かにスレ違いだけど、STLを使っている人の中にはBOOSTを使う用意の
ある人も多いのではないかと思っている。
そういった人が、STLではこうしているがもっとスマートにはならないだろうか、
と考えた時、BOOSTの中にある選択肢を"たまたま"知らなかったとしたらBOOSTスレ
にそれを聞きに行くだろうか。
知らないものは、聞きにはいかない。
ここでキーワードを教えるくらいは良いと思うけれどね。
0260デフォルトの名無しさん
NGNG0261デフォルトの名無しさん
NGNGC++は分割して作業しやすいように出来ているからね。
0262デフォルトの名無しさん
NGNG無名関数ですか、perlっぽいすがまた、激しくカコイイですね
未だにCライクにループで回す癖が抜けませんw
0263デフォルトの名無しさん
NGNGもともとはLispのlambda式なんだけどね。
BOOSTのlambdaはちょっと違和感があるけれど。。。
0264デフォルトの名無しさん
NGNGすれ違いで悪いんですが、Delphiでの解決方法教えてください
0265デフォルトの名無しさん
NGNG257はありだろうけど
さすがにそれはDelphiスレで聞くべきだよ
(本当に知りたければね)
0266デフォルトの名無しさん
NGNGアホは放置しろ。
0267デフォルトの名無しさん
NGNG0268デフォルトの名無しさん
NGNGttp://jbbs.livedoor.jp/bbs/read.cgi/computer/5651/1048584601/88
0269デフォルトの名無しさん
NGNG0271デフォルトの名無しさん
NGNGfunction, tuple, type_traits, regex, mem_fn, shared_ptr, ref, bind
0272デフォルトの名無しさん
NGNGhttp://lafstern.org/matt/wishlist.html
0273デフォルトの名無しさん
NGNG0274デフォルトの名無しさん
NGNG('A`) マジデ?
0275デフォルトの名無しさん
NGNG0276デフォルトの名無しさん
NGNG0277デフォルトの名無しさん
NGNG付属stlがくそだからじゃないか?
0278デフォルトの名無しさん
NGNG0279デフォルトの名無しさん
NGNGそんな怪しい名前のソフトは使いたくねーなw
0280デフォルトの名無しさん
NGNG多分これ。
ttp://www.freeml.com/message/[email protected]/0011266
0281デフォルトの名無しさん
NGNGMap.insert(std::pair<std::string,int>(std::string(""),1));
~~~~~~~~~~~~~~~
の部分をハードコーディングではなく書けませんか?
0282デフォルトの名無しさん
NGNGtypedef std::pair<std::string,int> OrenoPair;
OrenoMap Map;
Map.insert(OrenoPair(std::string(""),1));
0283デフォルトの名無しさん
NGNGtypedef std::pair<std::string,int> hoge;
0284デフォルトの名無しさん
NGNG0285デフォルトの名無しさん
NGNGstd::pair<>(std::string(""), 1)
ってこと?
0286デフォルトの名無しさん
NGNGそれOKなんですか?
0287デフォルトの名無しさん
NGNG0288デフォルトの名無しさん
NGNGダメだからmake_pairってのが用意されてたりする
0289デフォルトの名無しさん
NGNGMap.insert(std::make_pair(std::string(""), 1));
古いコンパイラだと受け付けないのもあるかもしれませんが・・・.
0290デフォルトの名無しさん
NGNGMapT m;
m.insert(MapT::value_type(std::string(""),1));
0291デフォルトの名無しさん
NGNGでもOK
0292デフォルトの名無しさん
NGNG0293デフォルトの名無しさん
NGNG0294デフォルトの名無しさん
NGNG意味が違うし
0295デフォルトの名無しさん
NGNG詳しく
0296デフォルトの名無しさん
NGNG287さんのはkeyが既存のものも変更されます.
あと,細かいところだと293さんが書かれているの(効率)もあります.
0297rubykitch
NGNGRuby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>C++
0298デフォルトの名無しさん
NGNG0299デフォルトの名無しさん
NGNG0300デフォルトの名無しさん
NGNGってやっちゃっていいのでしょうか?
なんかVC6だと警告でるのですが・・・。
0301デフォルトの名無しさん
NGNG警告の内容も晒さずに人様の貴重な時間を浪費して良くそんなことが聞けるな。
0302Ruby!!!!!!!!!!!!!!!
NGNG0303デフォルトの名無しさん
NGNGそれは無害です。
E:\Project\Test755\Test755.cpp(16) : warning C4786: 'std::reverse_iterator<......'
: 識別子が '255' 文字に切り捨てられました (debug 情報内)。
0304デフォルトの名無しさん
NGNGもうしわけありませんでした。
って、調べてみたら解決しました。
どうやらVCのコンパイラが対応していないだけってことだったらしいです。
#pragma warning(disable:4786)
っというように追加して、みんなやってるようです。
0305デフォルトの名無しさん
NGNGレスありがとうございました。
0306デフォルトの名無しさん
NGNGメモリ消費量も断片化しないからstd::vetorは捨てたものじゃない。
当初の予想以上に作り込む必要が出てきたときstd::mapは厳しいね、いろんな意味で。
0307デフォルトの名無しさん
NGNGお前の設計段階での抽象化が甘いだけだよ。
0308デフォルトの名無しさん
NGNG力技の実装が素直なわけないだろ。
「仕様変更に強い」ではなくて、
たまたま実装に都合のいい仕様変更がはいっただけじゃないのか?
特殊なケースを一般的であるかのように言うのは感心できない。
0309デフォルトの名無しさん
NGNG0310デフォルトの名無しさん
NGNG0311デフォルトの名無しさん
NGNG0312デフォルトの名無しさん
NGNGその通りですが、なにか?
0313306
NGNGstd::mapのキー検索の存在感が、かすむ、かすむ。
みんなはどうしてるわけ?mapにおけるキー以外の検索。
0314デフォルトの名無しさん
NGNGboost::multi_index
ってのはもうちょっと先の話だが、
キー以外の検索があるのなら map に不満が出るのはあたりまえ。
最初っからそう言えよ。
0315デフォルトの名無しさん
NGNG他に選択肢がありえる理由がわからん。
0316デフォルトの名無しさん
NGNGless でソートされてる必要は無いから set で保持するのは無駄だろ。
0317デフォルトの名無しさん
NGNG駄目なものは他のものを使っている。例えば赤黒木。
いずれにせよ、検索のための"algorithm"をstd::vector専用に書いたりはしない。
0318デフォルトの名無しさん
NGNGいつも無駄なわけじゃないだろ?
0319306
NGNGstd::setはメモリ消費量が大きいです。無駄多し。vector<list<setです。VC6,VC7で確認済み。
メモリを一括確保できるstd::vector::reserve()がある限り、std::vector最強だと思います。
ちなみに要素をswapしたい場合などは配列を直接移動させることは避けて
これまたポインタ配列やポインタリストを用意して順序付けするようにしてますが。
std::setは論外です。std::setは柔軟性の点で劣るかと。重み付けがかえって邪魔になる事多し。
0320デフォルトの名無しさん
NGNGC++を勉強してこい、話はそれからだな
0321デフォルトの名無しさん
NGNGひょっとして、検索が主な用途じゃないのか?
0322デフォルトの名無しさん
NGNGなんで初めにmapを使ったのか、理由を教えて。
0323デフォルトの名無しさん
NGNGメモリ消費量の大きさが「無駄」になるかどうかは使う場面ごとに違うだろ。
reserve するためには要素数に対する前提が必要だろ。
繰り返すが、
特殊なケースを一般的であるかのように言うのは感心できない。
0324306
NGNG実は、自分のPCに数十万のファイルがあってファイルを探すのが面倒なので
ファイル名だけでフルパス名を取得できる仕組みを作ってたのですが、
ファイル名をキーにして、ファイルのフルパス名・その他情報を値としてstd::mapを構成していたのですが、
色気を出してワイルドカード検索できるようにしようとした時点でstd::mapによる設計が形骸化しました。
現在そのプログラムはバックグラウンドで動かすサーバ形式をとっているのですが、
ファイルが数十万なので常駐メモリが100MBを超えています。(※意図的なものです。)
ギガクラスのメモリを乗せる時代に見合ったファイルインデックスシステムがあってもいいかな、と。
ゲームやVMでしかメモリをフル稼働しないのは勿体ない気がしたこともありまして。
0325デフォルトの名無しさん
NGNG挿入するまとまりを、
vectorに一旦入れてからset.insert(vec.begin(), vec.end())みたいな感じで
まるごとinsertしてみたけど意味無かった。
0326デフォルトの名無しさん
NGNGこれ見てからはもっぱらソース済みvectorは使わなくなったな。
0327デフォルトの名無しさん
NGNGおもいっきり>>307-308じゃんかw
0328デフォルトの名無しさん
NGNG自分の経験則からいくと、vector::reserveの冗長性を織り込んだメモリ消費量より、
std::listやstd::set,std::mapのメモリ断片化によるメモリ消費量の肥大化の方が厄介でした。
多くの場合、要素数のおおよその数が分かっているので、したがってvectorが最適である可能性が高い。
しかも、そのサイズに関する最適化の効果を確実に得られるのもvectorの特徴。
他のコンテナではPGによる最適化の手段が限られている。
0329デフォルトの名無しさん
NGNG予想も付かない場合が多い。
0330デフォルトの名無しさん
NGNG極端にメモリが無駄になるかのどちらかになるから。
vector以外のコンテナはそんな事は無い。
0331デフォルトの名無しさん
NGNG0332デフォルトの名無しさん
NGNG要素数が多くて、さらに、その数が予め解かってる場合は、
vectorがいいですね、そうですね、そうですよ。
0333デフォルトの名無しさん
NGNGさっきからstd::setを賞賛する痛い人と同一人物ですか?
同一人物でしたら残念ですが同意できません。
別人でしたら同意します。やっぱこういうのは、ケースバイケースですから。
0334デフォルトの名無しさん
NGNGソース済みvector(・∀・)イイ!
0335デフォルトの名無しさん
NGNGハゲワラタ
0336デフォルトの名無しさん
NGNGsetを薦めてるレスは>>315だけじゃない?
それも要素数の話が出る前の検索用コンテナの話題で。
0337デフォルトの名無しさん
NGNGケースバイケースだからな。
0338306
NGNGUnixにおけるlocate・slocateコマンドをメモリ常駐バージョン化して毛が生えた
他愛のないものであることは十分承知してます。でも作ってしまったものはしょうがない。orz
0339デフォルトの名無しさん
NGNGsetがいいよ。
[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デフォルトの名無しさん
NGNG0341デフォルトの名無しさん
NGNGvector は reserve が使える。それだけ憶えとけば十分。
そんな経験則、実際の判断に勘定するべきではない。
> メモリ断片化によるメモリ消費量の肥大化
ほんとで「断片化」が原因だったのか、怪しい言い回しだな。
0342デフォルトの名無しさん
NGNGqsort(&v[0], v.size(), sizeof(v::reference_type), comp_func);
というか、なぜvector::sort()はあんなに遅いのだろうか・・・。
vector::stable_sort()は現在順序を反映してくれるので許せるが。
0343デフォルトの名無しさん
NGNG0345デフォルトの名無しさん
NGNGint 1000000個を持ったvectorのソート
最適化なし qsort 1.9s sort 6.2s
最適化あり qsort 1.1s sort 0.8s
最適化してなかったとかいうオチだったらヌッコロス
0346デフォルトの名無しさん
NGNGちゃんと文字列を入れたstringで試してみ
0347デフォルトの名無しさん
NGNGintでやってみた。
ソースは
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デフォルトの名無しさん
NGNG0349デフォルトの名無しさん
NGNG0350デフォルトの名無しさん
NGNG0351デフォルトの名無しさん
NGNG#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デフォルトの名無しさん
NGNGVC++7.1 -O2 -GX
qsort
201ms
std::sort(Compare())
511ms
std::sort
481ms
0353デフォルトの名無しさん
NGNGfor(int i=0;i<16;i++)
はjにしなきゃ。
0354デフォルトの名無しさん
NGNGstd::sort()の方はコンストラクタ・デストラクタ・コピーコンストラクタ・代入演算子
が頻繁に使われてしまうから、これではまともな比較ができん。
0355デフォルトの名無しさん
NGNGVC++7.1 -O2 -GX
qsort
4256ms
std::sort(Compare())
5116ms
std::sort
6960ms
0356デフォルトの名無しさん
NGNGどう直したらまともな比較になるの?
0357デフォルトの名無しさん
NGNGコンストラクタ・デストラクタ・コピーコンストラクタ・代入演算子を
定義し直さないといけないのか。
使うの面倒だな
0358デフォルトの名無しさん
NGNGsort()が必要そうだな。どちらにしろqsort()は動かない処理系はまずない
だろうが、危険な香りがプンプンする。
0359デフォルトの名無しさん
NGNG標準で明記されていますよ.だから,sortはこのswapを使うはず.
なので,上のようなoverheadの由来がよく分かりません.
どこに原因があるのか知りたいです.(sortの実装詳細?)
0360デフォルトの名無しさん
NGNG標準のstd::sort()はstd::stringに対してswapを使うと明記されてるの?
初耳だが。STLport4.6.2を調べてみたが、特殊化されている気配はない。
std::stringの場合はsort()を自作した方がいいんじゃないの?そんなに
速度の低下が気になるなら。
0361デフォルトの名無しさん
NGNGクラス・構造体をソートする時はqsort
と使い分けるのが良さそうだな。
0362デフォルトの名無しさん
NGNG0363デフォルトの名無しさん
NGNG何項が怪しいと思うんだ?ちなみに聞いてみるが。
0364デフォルトの名無しさん
NGNG0365デフォルトの名無しさん
NGNGSTLport4.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特定のクラス専用に作られた swap 関数 (例えば inline
void swap( Foo& a, Foo &b);) を使ってくれないんですか?
0367デフォルトの名無しさん
NGNG残念ながらテンプレート・パラメータとしてswap関数を与えるバージョンは
標準にはない。君が作ってくれ。
0368デフォルトの名無しさん
NGNGCodeWarrior付属のSTLはちゃんと使う。std::stringを扱う場合も
インライン展開されるstd::sortの方がqsortよりずっと速い。
std::sortが遅いのはVC++処理系固有の問題、御愁傷様
0369デフォルトの名無しさん
NGNGqsortは一回の比較につきless, eq, greaterの情報を取得できるのに、
std::sortだとlessとgeqの情報しか取得できないじゃん。
にも関わらずstrcmp()使ってるから比較にかかる時間は同じ。
こんなファンクタ書かれたら明らかにstd::sortが遅くなるに決まってる。
0370デフォルトの名無しさん
NGNG( ゚Д゚)ハァ?
0371デフォルトの名無しさん
NGNGstable sortなら算術比較が有効な場合もあるけどなあ。
0372デフォルトの名無しさん
NGNGstring::swap() は規格に載ってる。
sort が swap 使っていいかどうかは不明。
0373デフォルトの名無しさん
NGNG0374デフォルトの名無しさん
NGNGstringにqsortして動かなくなる実装があったら教えて
0375デフォルトの名無しさん
NGNGgcc3.3.4
gcc3.4.2
bcc5.6.4
で試したら全部qsortの方が速かったよ。
0376デフォルトの名無しさん
NGNG0377デフォルトの名無しさん
NGNGqsort
4336ms
std::sort(Compare())
7000ms
std::sort
7631ms
0378デフォルトの名無しさん
NGNG(元スレから拾ってきた)
qsort:1963ms
std::sort(Compare()):2673ms
std::sort:3395ms
0379デフォルトの名無しさん
NGNG0380デフォルトの名無しさん
NGNGqsort 50ms
std::sort(Compare()) 1713ms
std::sort 2053ms
qsort速いね..
0381デフォルトの名無しさん
NGNGそれはCodeWarriorで、私は4歳でした。
その味は甘くてクリーミーで、こんな素晴らしい実装を教えてもらえる私は、
きっと特別な存在なのだと感じました。
今では、私がおじいさん。
孫に教えてあげるのは、もちろんCodeWarrior。
なぜなら、彼もまた特別な存在だからです。
0382デフォルトの名無しさん
NGNGBCCのqsortそんなに遅かったか?
BCC5.6.4 -O2 -vi
AthlonXP3000+ 1GB XPSP1
qsort:78ms
std::sort(Compare()):1218ms
std::sort:1437ms
0383デフォルトの名無しさん
NGNGswap関数では言語的に統制されたインターフェースとしては弱い。
int a, b;
a @= b; // aとbを交換するトカ
0384デフォルトの名無しさん
NGNG0385デフォルトの名無しさん
NGNGセレロンユーザの分際で粋がるとああなるっていう典型だな(藁
0386デフォルトの名無しさん
NGNGセレロン使いのおこちゃまが夜更かししちゃ駄目だぞ。
0387デフォルトの名無しさん
NGNG藁セレ使いはアフォ北森以降セレ使いは貧乏
0388380
NGNGinline 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デフォルトの名無しさん
NGNG0390デフォルトの名無しさん
NGNG初めから
// 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デフォルトの名無しさん
NGNGVC++7.1のDinkumwareもそうなってる
0392デフォルトの名無しさん
NGNG0393デフォルトの名無しさん
NGNG−完−
0394デフォルトの名無しさん
NGNGビヤーンが泣くぞ
0395デフォルトの名無しさん
NGNGただのsortより速いに決まっているであろう
0396デフォルトの名無しさん
NGNG0397デフォルトの名無しさん
NGNG0398デフォルトの名無しさん
NGNG0399デフォルトの名無しさん
NGNG0400デフォルトの名無しさん
NGNGCodeWarriorの最適化が甘いという落とし穴がないとは限らない。
どうするよ?CodeWarriorのqsortがVC7.1のstd::sortに負けてたら。
そんなわけで、CodeWarriorとVC7.1両方使えるユーザは同じコードを使ってVC7.1バージョンと比較してみて。
0401デフォルトの名無しさん
NGNGCVSでは修正されたみたいだ。
詳細は http://gcc.gnu.org/ml/libstdc++/2004-08/msg00167.html
0402デフォルトの名無しさん
NGNG0403デフォルトの名無しさん
NGNG(マイクロソフト、ボーランドのコンパイラでは確認したが他のコンパイラでは
試していない。)
#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クイックソートに不向きな順序付けの実装ですね。
ただ、今争点になっているのはコンテナのswap()のコストに関してなので、少し違うかも。
0405デフォルトの名無しさん
NGNGなかなか格調高いスレですね。
0406デフォルトの名無しさん
NGNG両方使えるが、どのソースを使ったらいいんだい?
0407デフォルトの名無しさん
NGNG0408デフォルトの名無しさん
NGNGただし、コンパイルエラーが出たから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デフォルトの名無しさん
NGNG0410デフォルトの名無しさん
NGNGMS clもstlportを使えばもっと早くなるんじゃないかな。
0411デフォルトの名無しさん
NGNG*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スレ違い氏ね
0414デフォルトの名無しさん
NGNG「氏(うじ)ね」?
0415デフォルトの名無しさん
NGNG↓次の方どーぞー
0416デフォルトの名無しさん
NGNG0417デフォルトの名無しさん
NGNG0418デフォルトの名無しさん
NGNGvectorなどのコンテナを利用し、
サイズの大きい構造体(Hoge)を動的にデータを格納する場合
vector<Hoge> よりも vector<Hoge*> の方がオーバーヘッドが少ないと聞きました
で、実際その方法でやってみたわけなんですが、
この方法だと結局自分でメモリ確保して解放する手間が出てきて
コンテナ利用する利点が失われるのでは、と思ったわけで…
本当にオーバーヘッドが大きいのでしょうか?
それとこの方法で、コンテナを利用するのはごく普通なことなんでしょうか?
auto_ptr 使えとかは無しでお願いします
0419デフォルトの名無しさん
NGNG0420デフォルトの名無しさん
NGNGvector<Hoge> → vector<Hoge*>
+ 要素の追加時に起こる O(n) のコピーが軽い
これは明らかな利点。
「オーバーヘッド」とか言ってる奴はたぶんこれを指してる。
- 寿命管理の必要がある
shared_ptr 使えば回避できる。
ただし、その場合は一つ目の利点を再検証してみたほうがいいだろう。
- アクセス速度はほとんど変わらないだろうが、厳密には遅くなっている
よっぽどシビアな環境でなければ無視してかまわないはず。
? 要素それぞれでメモリ確保するので使用メモリが増える可能性がある(減る可能性もある)
もともと Hoge のサイズが大きいなら、これも無視できるかも。
0421デフォルトの名無しさん
NGNGvectorの恩恵(メモリ上で連続しているためアクセス速度が速い)が受けられない。
0422デフォルトの名無しさん
NGNG> vectorなどのコンテナを利用し、
> サイズの大きい構造体(Hoge)を動的にデータを格納する場合
> vector<Hoge> よりも vector<Hoge*> の方がオーバーヘッドが少ないと聞きました
言っている意味を説明しろ。>オバーヘッド
0423デフォルトの名無しさん
NGNG0424デフォルトの名無しさん
NGNG>+ 要素の追加時に起こる O(n) のコピーが軽い
>これは明らかな利点。
>「オーバーヘッド」とか言ってる奴はたぶんこれを指してる。
何この人RVOも知らないの?
0425デフォルトの名無しさん
NGNGいつから二者択一するという前提になったのだろう?
0426デフォルトの名無しさん
NGNGcapacity超えて再確保し直す時の話じゃないの?
0427デフォルトの名無しさん
NGNG空気嫁
0428デフォルトの名無しさん
NGNG俺のC++理解度もまだまだだなぁ(pgr
0429デフォルトの名無しさん
NGNGどこに Return Value Optimization の出番が?
0430デフォルトの名無しさん
NGNG424はまったく話が理解できてないだけだよ。
0431デフォルトの名無しさん
NGNGコンテナ数の増減やコンテナのコピーは早いが、
実データにアクセスするにはロスが生じる
という解釈でよろしいでしょうか?
結局、Hoge で行った方がいいみたいですね
いろいろ返答ありがとうございました
0433デフォルトの名無しさん
NGNGクリチカルなら面倒なことに手を入れなきゃなんないだろうけど
0434デフォルトの名無しさん
NGNG>実データにアクセスするにはロスが生じる
・・・文章ちゃんと読めてる?
0435デフォルトの名無しさん
NGNG>>420 >- アクセス速度はほとんど変わらないだろうが、厳密には遅くなっている
>>421
からそう解釈しましたが、違いますか?
0436デフォルトの名無しさん
NGNG0437デフォルトの名無しさん
NGNGもう一行下は読んだのか?
0438デフォルトの名無しさん
NGNG>>421は悪意をもった初心者だ。気をつけろ。
0439デフォルトの名無しさん
NGNG半年以上でかつシラフなのであればPGをやめるべきだろう。
だれか肩たたいてやれ。
0440デフォルトの名無しさん
NGNG>>421の言っていることも嘘ではないぜ?
0441デフォルトの名無しさん
NGNG「iteratorで叩く」とはどういう意味?
初めて聞いた。英語だとどう表現するの?
0442デフォルトの名無しさん
NGNG0443デフォルトの名無しさん
NGNGきちんと計測してから出直して来い。
0444デフォルトの名無しさん
NGNG納得できず、自分でクイックソート関数を起こしてみた。
ソース
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デフォルトの名無しさん
NGNGc_str()を使ってstrcmp()による比較を用いた方がVC7.1の場合は速くなった。
0446デフォルトの名無しさん
NGNG>>444
×コピーコンストラクタなどの副作用
○代入演算子のオーバーヘッド
0447デフォルトの名無しさん
NGNGstringは中身の長さが異なってもクラス自体の大きさは一緒の処理系が
多いぞ。しかしそれに依存したプログラムを書くと移植性が無くなってしまう
けどな。
0448デフォルトの名無しさん
NGNG言う事でいいんじゃないの?
0449デフォルトの名無しさん
NGNG0450デフォルトの名無しさん
NGNGそもそも中身の大きさに応じて自身のサイズを変えるなんて出来るのか?
型がちがくなっちまわないか?
0451デフォルトの名無しさん
NGNGそりゃそうだよな。
0452デフォルトの名無しさん
NGNG確かに。
gccのstd::stringはsizeof(std::string)が4バイト。
0453デフォルトの名無しさん
NGNG0454デフォルトの名無しさん
NGNGと思ったけど、thisをメンバに持ってるとか、そんなことやってる場合も多々あるな。
0455デフォルトの名無しさん
NGNG自分では何も書かないくせにアフォ言う権利ないよ。
0456デフォルトの名無しさん
NGNG0457デフォルトの名無しさん
NGNGそういう代物を複数用意して配列にセットする状況があるかどうかだが、・・・実際あるのかね?
リンクリストを車輪再発明したアフォクラスならありうるとは思うのだけど。
0458デフォルトの名無しさん
NGNG0459デフォルトの名無しさん
NGNG可能性 * 効果 = 期待値
で考えると、この件は可能性が低いながら、
かなり悲惨な効果があるので積極的に回避すべきかと。
0460デフォルトの名無しさん
NGNG0461デフォルトの名無しさん
NGNGもうガマン汁出まくりですよ
0462デフォルトの名無しさん
NGNGググってもいまいちピンときません。
0463デフォルトの名無しさん
NGNG隔離スレから出てくるなよ
http://pc5.2ch.net/test/read.cgi/tech/1091198276/
0464デフォルトの名無しさん
NGNG0465デフォルトの名無しさん
NGNG他要素といっても同じstring型の情報じゃないでしょ。
ヒープ上に参照カウンタをもったアロケータが作成されており、
そのアロケータへのポインタだけを持っているというのがstringクラスの実態だろう。(gcc)
0466デフォルトの名無しさん
NGNGそんなの実装による。
0467デフォルトの名無しさん
NGNG0468デフォルトの名無しさん
NGNG16
0469デフォルトの名無しさん
NGNGということは、stringのコピー時には文字列自体のコピーは発生しない(copy on write)
と思ってよい?
0470デフォルトの名無しさん
NGNGだからそれも実装依存だっつーのに
0471デフォルトの名無しさん
NGNGソースは?
0472デフォルトの名無しさん
NGNG>>467-468が載ってる本
0473デフォルトの名無しさん
NGNG持ってないな。
買っとこ。
0474デフォルトの名無しさん
NGNGまあ少なくともgccとvcではそういう実装になっている。
安心してコピーしてよい。
0475デフォルトの名無しさん
NGNGEffective STL 15項でいう実装D
0476デフォルトの名無しさん
NGNG0477デフォルトの名無しさん
NGNG0478デフォルトの名無しさん
NGNG昔のことだから今どうなってるかは分からないけどね。
0479デフォルトの名無しさん
NGNGsizeof(wchar_t)って2ですよね?
0480デフォルトの名無しさん
NGNGmulti byte string
の違い理解していますか?
0481デフォルトの名無しさん
NGNG0482デフォルトの名無しさん
NGNG3バイト文字なんてあるの???
0483デフォルトの名無しさん
NGNG481 名前:デフォルトの名無しさん[sage] 投稿日:04/11/05 09:31:43
3バイト文字なんてあるの???
0484デフォルトの名無しさん
NGNG482 名前:デフォルトの名無しさん[sage] 投稿日:04/11/05 09:46:43
481 名前:デフォルトの名無しさん[sage] 投稿日:04/11/05 09:31:43
3バイト文字なんてあるの???
0485デフォルトの名無しさん
NGNGUCS-2
sizeof(wchar_t)==4のとき
UCS-4
UTF-8とかは有り得ないから3バイトは無い
0486デフォルトの名無しさん
NGNGチョソとかシナの漢字と統合なんて嫌だろ。
0487デフォルトの名無しさん
NGNG日本人ならUCS-4だろ。
チョソとかシナの漢字と統合なんて嫌だろ。
0488コピペ推奨
NGNGhttp://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デフォルトの名無しさん
NGNG486 名前:デフォルトの名無しさん[sage] 投稿日:04/11/05 10:01:05
日本人ならUCS-4だろ。
チョソとかシナの漢字と統合なんて嫌だろ。
0490デフォルトの名無しさん
NGNG0491デフォルトの名無しさん
NGNG0492デフォルトの名無しさん
NGNG0493デフォルトの名無しさん
NGNGちなみにWindowsでは一般的に2だが(APIの関係上)、Linuxなんかだと普通4
0494デフォルトの名無しさん
NGNGsizeof(wwchar_t) == 4なchar_traitsの型作って、
basic_string<wwchar_t>すればいいけど、
>>479はUTF-8の事を言っているとしか思えん…
Cでmbsはchar []であるように、C++でmbsはstringです。
0495デフォルトの名無しさん
NGNGwwchar_t==4
こう統一しようぜ
0496デフォルトの名無しさん
NGNG0497デフォルトの名無しさん
NGNG> sizeof(wwchar_t) == 2な環境で、UCS-4にしたいなら、
< sizeof(wchar_t) == 2な環境で、UCS-4にしたいなら、
0498デフォルトの名無しさん
NGNGbasic_string<char> でもbasic_string<unsigned char>でも
sjisやjis入れてtokenizerすると化けるのですが 仕様?
あきらめて wstringにしたけどね
0499デフォルトの名無しさん
NGNG0500498
NGNG> Cでmbsはchar []であるように、C++でmbsはstringです。
ってのがあったから すこし希望を見たんだけど やっぱ無理でつよね orz
あとCでmbsはchar[]とあるけど mbsは unsigned char[]ってのはVCの方言?
0501デフォルトの名無しさん
NGNG0502デフォルトの名無しさん
NGNGstringがmbsに対応していないのではなくて、tokenizerがmbsに対応していないだけ。
このスレ全体の印象として、初心者が回答者を演じているみたいなので
もうこのスレのログは削除して2度と来ないことにした、マジで。
有益な情報全然ないし。
0503デフォルトの名無しさん
NGNGそんな的外れな突っ込みはないよ。
0504デフォルトの名無しさん
NGNG0505デフォルトの名無しさん
NGNGちょっと前どこかのスレで話題に上ってたように思うんだけれど.
0506デフォルトの名無しさん
NGNG0507デフォルトの名無しさん
NGNG0508デフォルトの名無しさん
NGNG定数時間ですまないから?
>>507
詳しく
0509デフォルトの名無しさん
NGNG>>504はstd::base_string<class T>だと言いたいのでは?とエスパリング。
0510デフォルトの名無しさん
NGNGがんばって作ったとしても、実行効率が悪そうな気もする。
コンテナとして扱わないなら、
問題になるのはfindとかだけなんだから、そこらへんをうまく、
MSのCRTみたいに、_MBCSが#defineされてるときはMBCS対応になるようにするとか、
そんな感じかな。
0511デフォルトの名無しさん
NGNGmulti byte character sequenceと「見做す」わけだから、
basic_stringで扱えないのは当たり前。
これは固定幅の文字のsequenceなんだから。
>>510
mbcharクラスってbasic_string<mbchar>するの?
それってwchar_tじゃない…
0512デフォルトの名無しさん
NGNG文字のエスケープのところで
\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デフォルトの名無しさん
NGNG0514デフォルトの名無しさん
NGNGそれはwchar_tは使えないという事じゃない。
そもそも汎用にしたいのに、>>485が嬉しいってことが理解できない。
UCS-4やUTF-32扱えないと汎用にはならないから、
uint32_tを使うんが良いんじゃないの?
uint16_tでサロゲートペアを明示的に扱いますって言うんなら別だけど。
0515デフォルトの名無しさん
NGNGkdevelopでSTLの入力補完をすることはできるのでしょうか?
0516デフォルトの名無しさん
NGNGL'\x0041' == L'A' == 0x0041;
これを期待してもいいのか?ってことです。
0517デフォルトの名無しさん
NGNG0518デフォルトの名無しさん
NGNG(512のMSDNの記述によると)
L'\x0041' == L'A'
までは保証されていると考えてよいのでしょうか?
0519デフォルトの名無しさん
NGNG0520デフォルトの名無しさん
NGNG0521デフォルトの名無しさん
NGNG0522デフォルトの名無しさん
NGNGつまりMicrosoft Specificに指定し忘れただけということでしょうか。
0523デフォルトの名無しさん
NGNGbasic_stringはSTLだぞ
0524デフォルトの名無しさん
NGNGLinux は,UCS-2 の上位セットである UCS-4 をサポートしています。
C++Builderのヘルプより。
やっぱwchar_tが2バイトならUCS-2で
wchar_tが4バイトならUCS-4でいいんじゃないの?
0525デフォルトの名無しさん
NGNGC++なんて問題外^^;;;
0526デフォルトの名無しさん
NGNGほとんどの処理系がそうなっているだけでC++の規格ではそうでなくても良い。
とはいっても代わりに使えるものなんてないと思うけどな。
0527デフォルトの名無しさん
NGNG0528デフォルトの名無しさん
NGNG#include <string>とusing namespace stdは書いてあります。
Cygwinとg++を使っています。
何がいけないのでしょう。
0529デフォルトの名無しさん
NGNG・エラーメッセージを勝手に省略しない
・ソースコードの原因となっていそうな部分は最低限提示する
0530528
NGNG#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>何がいけないのでしょう。
g++
0532デフォルトの名無しさん
NGNG0533528
NGNG>>531
g++とだけ言われても分かりません。
0534デフォルトの名無しさん
NGNGg++ で wchar_t まわりをあてにしてはいけません。
はっきり言ってウンコです。
0535528
NGNGtypedef basic_string <wchar_t> wstring;
を自分で定義してコンパイルは通ったのですが、なんでコメントアウトされてるんでしょう。
そもそもwstringはANSIで標準化されているはずだと思うんですが、
ANSIの標準ってあまり当てにならないんでしょうか。
ともかく、どうもありがとうございました。
0536デフォルトの名無しさん
NGNG0537デフォルトの名無しさん
NGNGC++のコンパイラってのは、準拠度を競ってるレベルだ、すごいだろ。
0538デフォルトの名無しさん
NGNGwstringがdefaultで使えんのは2.9xまで。3.xになるとOK。
2.9xのテンプレート周りは3.xに比べるとゴミ。
だからVineスレであれだけgcc3にしろと騒がれてた。
0539デフォルトの名無しさん
NGNG0540デフォルトの名無しさん
NGNG0541デフォルトの名無しさん
NGNG0542デフォルトの名無しさん
NGNG0543デフォルトの名無しさん
NGNG0544デフォルトの名無しさん
NGNGあまり期待し過ぎないほうがいい。
0545デフォルトの名無しさん
NGNG0546デフォルトの名無しさん
NGNGヘッダをいじってwstringの定義を復活させて
c_str()のところでcharの"\0"を返すところでエラーが出るので、
そこをちょめちょめすると使える。
あとはwcout/wcinがないのと、
定数のL"ABC"形式が使えんので自力で何とかすること。
実際にこれで仕事してたけど何ともない。
0547デフォルトの名無しさん
NGNGgcc3はborlandやVC6に比べればすんなりboostが使えるし
Linux上なら実行ファイルの巨大化もないのでいい感じ。
0548デフォルトの名無しさん
NGNG0549デフォルトの名無しさん
NGNGそうそう、gcc3は一番標準に近いよね。
マイクロソフトのQuickCなんてC99にすらまったく準拠していないし、
ボーランドのTurboC2.0とかもぜんぜん準拠していないしね。
それどころか、STLさえ付いていない。
gccの圧勝。
0550デフォルトの名無しさん
NGNGダメダメだな、マイクロソフトw
0551デフォルトの名無しさん
NGNGそこまでするなら、素直にCの範疇でやってれば良いのに・・・
わざわざC++使おうとするメリットって何?
0552デフォルトの名無しさん
NGNGいや、まだC99もSTLもなかったころのもんだろ。
これって釣られた?
0553デフォルトの名無しさん
NGNG大した事じゃない
0554デフォルトの名無しさん
NGNG何でVC2003と比較しないんだろ。
0555デフォルトの名無しさん
NGNGCはメンドイ。
>>554
VC2003がベストだな。でもその次はgcc3だな。
0556デフォルトの名無しさん
NGNG0557デフォルトの名無しさん
NGNG0558デフォルトの名無しさん
NGNG0559デフォルトの名無しさん
NGNGいつから gcc はマイクロソフトのものになったんだ?w
>>556
やる気もなにも上から下まで中の人が入れ替わってて
ブランドを引き継いでいるだけの事実上もう別の会社だろ。
0560デフォルトの名無しさん
NGNG自力で何とかすることとか書いておいてメンドイってどういうことなんだろ?
わざわざGCC使ったりいまいち意味がわからない。
0561デフォルトの名無しさん
NGNG今やVC++7.1だけではなく、icc-8.1もCW9.2もboost100%でありgccはかなり遅れたコンパイラ。
0562デフォルトの名無しさん
NGNGbccはゴミ未満だな
0563デフォルトの名無しさん
NGNGだいたいこんな感じ。
0564デフォルトの名無しさん
NGNGそれはない
0565デフォルトの名無しさん
NGNGwcha_tとかどうでもいいんだよ。たぶん
0566デフォルトの名無しさん
NGNG0567デフォルトの名無しさん
NGNGすまん間違えた。
gcc3≒LSI-C86試食版。
大体こんな感じ。
0568デフォルトの名無しさん
NGNG0569デフォルトの名無しさん
NGNGメンドイのは可変長のバッファサイズの管理。reallocとか。
ヘッダを数行いじるのは別にメンドクない。
0570デフォルトの名無しさん
NGNG雑誌の付録についてくるところとか、ユーザが中学生ってところがそっくり。
これで勉強して大人になったら本物のコンパイラを買う。
0571デフォルトの名無しさん
NGNGあやまれ!
LSI-C86試食版にあやまれ!
誰かAAお願い
0572デフォルトの名無しさん
NGNGMSのやつの追加キットと考えるべきかと。
0573デフォルトの名無しさん
NGNG文字列定数をワイド文字にするのはいいの?
あなた書き込みが相当おかしいですよ?
0574デフォルトの名無しさん
NGNGえー、そのbccだってwstringぐらい使えるよーw
0575デフォルトの名無しさん
NGNGICC@Linuxは?
0576デフォルトの名無しさん
NGNG0577デフォルトの名無しさん
NGNGLinux版のicc-8.1はboost100%じゃないよ
0578デフォルトの名無しさん
NGNGC++やりたいなら、まともなC++コンパイラ買わないと・・・
0579デフォルトの名無しさん
NGNGspiritが使えないのとwstringが使えないのでは全然致命度が違うぞ。
wstringが使えないのはいくらなんでもお粗末過ぎる。
0580デフォルトの名無しさん
NGNGうん、いいの。定数をワイドにする必要の有無に関わらず、
ネット上を流れたりディスク上に保存するデータはマルチバイトなので、
変換処理はいずれにしても必要。
仕様が統一されとらんワイドキャラで通信すると
クライアントとの互換性がまずいだろ。
0581デフォルトの名無しさん
NGNG:.,' . : : ; .::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文字列定数と外部データを同じ土俵で比較できるの?
だったら何故、内部コードにワイド文字を使おうとする?
あなた本当に仕事でそんなことしてるの?
大丈夫?いや、あなたじゃなくてあなたの会社。
0583デフォルトの名無しさん
NGNG自前の正規表現マッチャやHTMLパーサがワイド専用だからだよ。
その方が性能がいいからね。
内部処理はワイド、外部はマルチ、これがポリシー。
0584デフォルトの名無しさん
NGNGなら、文字列定数もワイドのはずでしょ?
それとも国際化のために文字列定数を持たないポリシーとか言い出すの?
ほんと、大丈夫?
0585デフォルトの名無しさん
NGNG正規表現処理が高性能化するからだよ。
理由がわからなきゃ教科書嫁。
0586デフォルトの名無しさん
NGNGはぁ?
高性能化のために文字列を持たないの?
頭おかしくなっちゃった?
0587デフォルトの名無しさん
NGNG0588デフォルトの名無しさん
NGNG0589デフォルトの名無しさん
NGNG0590デフォルトの名無しさん
NGNG0591デフォルトの名無しさん
NGNG誰か解説して。
0592デフォルトの名無しさん
NGNG0593デフォルトの名無しさん
NGNGMSでもCOMの機能使う時とかワイドに変換して引数渡すだろ。
0594デフォルトの名無しさん
NGNG0595デフォルトの名無しさん
NGNG普通だよ。
それを>>585が、文字列定数はマルチバイトのほうがいいって言い張ってる。
内部処理はワイドだけど文字列定数はマルチバイトってめんどくさいはずなんだが。
0596デフォルトの名無しさん
NGNG0597デフォルトの名無しさん
NGNG0598デフォルトの名無しさん
NGNG0599デフォルトの名無しさん
NGNGオブジェクトへのデータ入力がマルチバイトのインターフェイスで統一されてるから
文字列定数もマルチバイトにしてるってだけの話ならわからんでもないんだが。
0600デフォルトの名無しさん
NGNGL"あいうえお"よりいいと言い張る根拠は何なの?
しかも高性能化するってどういうこと?
わざわざそんなことする理由は何?
0601デフォルトの名無しさん
NGNG0602デフォルトの名無しさん
NGNG0603デフォルトの名無しさん
NGNG固定長バッファのsprintfとか実にめんどくさいと思うんだが。
0604デフォルトの名無しさん
NGNG0605デフォルトの名無しさん
NGNG0606デフォルトの名無しさん
NGNG0607デフォルトの名無しさん
NGNG0608デフォルトの名無しさん
NGNGあんなもん使えるかボケ
0609デフォルトの名無しさん
NGNG0610デフォルトの名無しさん
NGNG0611デフォルトの名無しさん
NGNG0612デフォルトの名無しさん
NGNGwxWindows+mingw萌え
0613デフォルトの名無しさん
NGNGさらにboost注入!
40MB!!すげー!!
0614デフォルトの名無しさん
NGNGstring str;
str.resize(4096);
str[0] = '*';
int n = str.size();
ここで n=4096 とならないといけないのに、
n=1 となってしまいます。
どうしてでしょうか?
string をバッファとして使いたくて上記のコードを書いているのですが、
うまくいかなくて悩んでいます。
0615デフォルトの名無しさん
NGNGstr.reserve(4096); としてみては?
0616デフォルトの名無しさん
NGNGありがとうございます。
resize() をしているので、4096 になるべきだと思いますが。。。
で、私の手違いだとということが分かりました。
void func(string* line)
{
line->resize(4096);
line[0] = '*';
int n = line->size();
}
こんなことをしていたので間違ってしまいました。
line はポインタなので
(*line)[0] = '*'
としたら正常に動作しました。
0617615
NGNGVC6は窓から投げ捨てましょう
0618デフォルトの名無しさん
NGNGVC++6.0+付属STLでやってみたが4096って出るが。
0619デフォルトの名無しさん
NGNGvoid func(string& line)
0620デフォルトの名無しさん
NGNG0621デフォルトの名無しさん
NGNG「heapオブジェクト」とは何ですか?
0622デフォルトの名無しさん
NGNG0623デフォルトの名無しさん
NGNG0624デフォルトの名無しさん
NGNG医者に診てもらえ
0625デフォルトの名無しさん
NGNG上のスレの流れちゃんと見て発言してる?
0626デフォルトの名無しさん
NGNG良かったな!大漁だぞ
0627デフォルトの名無しさん
NGNGたぶんnewでメモリを確保したオブジェクトの事だろう。
0628デフォルトの名無しさん
NGNGポインタは使うしかないよね?
0629デフォルトの名無しさん
NGNGオブジェクトのコピーだろ?
GCCなら、やり方によっては何もしなくても参照にしてくれるぞ。
0630デフォルトの名無しさん
NGNG引数はポインタで受け取って、関数の頭で参照に入れればいい。
C++の参照渡しは呼び出す側は値渡しと同じ記述になってしまうので
後から見たときに値が変更されている可能性を発見しにくい。
値を変更するときは避けるのが常識。
C#ではout/refをつけることでこの問題を回避したね。
0631デフォルトの名無しさん
NGNGそれを言うならポインタだって同じじゃん。主張の意図がよくわからん。
0632デフォルトの名無しさん
NGNGポインタは&をつけるだろ。
0633デフォルトの名無しさん
NGNGそういう話だな。
ポインタ渡しだと指標になる、と。
0634デフォルトの名無しさん
NGNGそこまで行くとコーディングスタイルの問題だな。自分の常識を人に
むやみに押しつけないように。
0635デフォルトの名無しさん
NGNGポインタ渡しするのは、ナルポインタを使いたいときだな。
0636デフォルトの名無しさん
NGNG0637デフォルトの名無しさん
NGNG0638デフォルトの名無しさん
NGNG値を変更するかはヘッダで判断。
ただし、親オブジェクトを指定するのにはポインタ渡しを使う。
親からthisを渡す場合がほとんどだから。
0639デフォルトの名無しさん
NGNG君らは前方宣言で引数の型の確認もせずに関数を使うのかい?
0640デフォルトの名無しさん
NGNGコードを書くときの話じゃなくて可読性の問題。
少なくとも&がついてりゃそのことだけでアドレス渡しをしてることが
一目瞭然だけど、参照の場合、関数宣言を確認しないとわかんない。
0641デフォルトの名無しさん
NGNGデストラクタの中で解放されてるんでしょうか?
なんかメモリがどんどん増えているんですが。
普通、閉じ括弧(})に来たときにデストラクタって自動で呼ばれるんですよね?
他にnewやmallocは使っていないので、stringしか考えられないんですが。
0642デフォルトの名無しさん
NGNG0643デフォルトの名無しさん
NGNGポケットのなかには ビスケットがひとつ
ポケットをたたくと ビスケットがふたつ
もうひとつたたくと ビスケットがみっつ
たたいてみるたび ビスケットがふえる
0644デフォルトの名無しさん
NGNGそんなふしぎなポケットがほしい
そんなふしぎなポケットがほしい
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デフォルトの名無しさん
NGNG0647デフォルトの名無しさん
NGNGポケットのなかには ビスケットがひとつ
ポケットをたたくと ビスケットがふたつ
×もうひとつたたくと ビスケットがみっつ
○もうひとつたたくと ビスケットがよっつ
0648デフォルトの名無しさん
NGNG一つ一つは小さくなって
結局総量は変わらないという罠
0649デフォルトの名無しさん
NGNGまだまだあまあまちゃんねー にゃんにゃん
0650デフォルトの名無しさん
NGNGこれリークすると思ってるのかな?
0651デフォルトの名無しさん
NGNG0652デフォルトの名無しさん
NGNG夢が無い人だな〜
0653デフォルトの名無しさん
NGNGいや寧ろ、細かな破片が生じる分食べられる分量は減るところまで考慮しなければ。
#つーか、それって単なる破砕だね。
0654デフォルトの名無しさん
NGNG0655デフォルトの名無しさん
NGNGそれはするべきじゃないだろう
0656デフォルトの名無しさん
NGNG漏れも参照渡しは好きじゃない。理由は同じくソースの可読性
#define ByRef
とか書いて test( ByRef str ); とか書くのも気持ち悪いし
test( ByRef(str) ); もなんか違和感有るし
気持ち良い書き方は無いのかな・・
0657デフォルトの名無しさん
NGNG0658デフォルトの名無しさん
NGNG明示的にキャスト書く
0659デフォルトの名無しさん
NGNG0660デフォルトの名無しさん
NGNGはダメ、
void assign_hello( std::string& str ){ str.assign( L"Hello!" ); }
ならOK。
微妙な乙女心。
0661デフォルトの名無しさん
NGNG知らんかった
0662デフォルトの名無しさん
NGNGcout << typeid("Hello").name() << endl;
cout << typeid(L"Hello").name() << endl;
すれば一目瞭然
0663デフォルトの名無しさん
NGNGどなか解説してください。
0664デフォルトの名無しさん
NGNGおねえさまはどうしてそんな話を持ち出されたのかしら。
0665デフォルトの名無しさん
NGNG普通だったらwstringを使おうという発想が出てきそうなものだが・・・・
0666デフォルトの名無しさん
NGNG662は何が言いたいのかよくわかりません。
void assign_hello( std::string& str ){ str = "Hello!"; }
void assign_hello( std::string& str ){ str.assign( "Hello!" ); }
に訂正してお詫び申し上げます。
(結果が同じでも)代入目的で参照を受け取るのはイヤ。
戻り値にするべき。
0667デフォルトの名無しさん
NGNGgcc3.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デフォルトの名無しさん
NGNGfstreamのオブジェクトを他関数に渡す時は?
0669デフォルトの名無しさん
NGNG0670デフォルトの名無しさん
NGNG0671デフォルトの名無しさん
NGNGはダメ
void append_hello( std::string& str ){ str.append( "Hello!" ); }
ならOK
さてな〜んだ♪
0672デフォルトの名無しさん
NGNG> 662は何が言いたいのかよくわかりません。
ワラタ
0673デフォルトの名無しさん
NGNG>>661-662はoperator =()にconst wchar_t *を受け取るものはないがassignにはあるんだとでも思ったんだろう。
0674デフォルトの名無しさん
NGNG元々代入じゃなかった関数の中身が諸々の事情で
代入になった場合には、結果が同じでも関数の型を変更する気ですか?
0675デフォルトの名無しさん
NGNGエスパーいないのか?
0676デフォルトの名無しさん
NGNGoperator=は特別なんだろう、彼にとって。
0677デフォルトの名無しさん
NGNG0678デフォルトの名無しさん
NGNGstd::map<char *, value_type, MyLess> myMap;
0679デフォルトの名無しさん
NGNGstruct MyLess { bool operator () (const char *lhs, const char *rhs) const { return strcmp(lhs, rhs) < 0; } };
std::map<char *, value_type, MyLess> myMap;
0680デフォルトの名無しさん
NGNG0681デフォルトの名無しさん
NGNG参照のみの文字列は重複なしでプールに叩き込んどいて、ポインタだけで
処理ってのも、少なくないな。
stringにしたって、数千〜数万のオーダーにでもならない限り目に見えて
差が出ることはあまりないけどね。
0682678
NGNGありがとうございました。
0683677=682
NGNG0684デフォルトの名無しさん
NGNG0685デフォルトの名無しさん
NGNGそれは何回も言うように処理系依存。Copy on Writeが標準だとでも?
0686デフォルトの名無しさん
NGNG調べるの面土居けど。
0687デフォルトの名無しさん
NGNGググっても詳しいのが出てこない
0688デフォルトの名無しさん
NGNGこのままだと共有してるオブジェクトを変更すると別にコピーも変更されちゃう。
だから、変更操作しようとしたときに、そのオブジェクトの実体を(ほんとに)コピーする。
Linuxのメモリ管理とかでも使われてる枯れた手法。
0689デフォルトの名無しさん
NGNG0690デフォルトの名無しさん
NGNGpop_back();
push_front(front());
front().update();
これをもっと効率良くする方法は無いでしょうか。
もしくは環状リストとして使う方法を知りたいです。
0691デフォルトの名無しさん
NGNGその処理のどこに不満があるの?
0693デフォルトの名無しさん
NGNG0694デフォルトの名無しさん
NGNGアロケータを書け。
0695デフォルトの名無しさん
NGNG0697デフォルトの名無しさん
NGNG0698デフォルトの名無しさん
NGNGほかに無いだろ。
0699デフォルトの名無しさん
NGNG0700デフォルトの名無しさん
NGNG0701デフォルトの名無しさん
NGNGsecondのbool値は何を意味するんでしょうか?
0702デフォルトの名無しさん
NGNGmulti- では単に iterator だけが返されるようになる
0703デフォルトの名無しさん
NGNGsetの仕様がよく分かってないんだけど、
挿入できたかどうか、っていうのはユニークな値かどうかってこと?
0704デフォルトの名無しさん
NGNG0705デフォルトの名無しさん
NGNG拠点を構えるソフトウェア開発会社
グリーンシステムを応援するHPです。
http://www.geocities.jp/grs_hp/
こちらのスレの住人のかたがたのようなレベルの高いかたに
ピッタリだと思いますので、是非一度ご覧下さい。
0706デフォルトの名無しさん
NGNGそうだったんですか。
ありがとうです。謎は全て解けました。
0707デフォルトの名無しさん
NGNG検索を早くする方法はありませんか?
キーは文字列です。
0708デフォルトの名無しさん
NGNG件数がいくら多くなっても検索速度が落ちないコンテナなんてないです。
0709デフォルトの名無しさん
NGNG0710デフォルトの名無しさん
NGNG0711デフォルトの名無しさん
NGNGハッシュ関数が悪くなくてもロード率が上がれば衝突が多くなる。
0712デフォルトの名無しさん
NGNG0713デフォルトの名無しさん
NGNGハッシュ関数の性能を上げる。
0714デフォルトの名無しさん
NGNG0715デフォルトの名無しさん
NGNG0716デフォルトの名無しさん
NGNGc:\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デフォルトの名無しさん
NGNG0718デフォルトの名無しさん
NGNG散々ガイシュツ。もう答える気力もない。
0719デフォルトの名無しさん
NGNGヘルプ読めって、よく周りの人たちから言われない?
0720デフォルトの名無しさん
NGNG知らないなら、いちいち糞レスしなくていいよ (プ
0721716
NGNGここにいる連中はgoogle以下のクズばかりだな。
C4786は無視してよい。出さないためには
#pragma warning(disable:4786)
を書く。
0722デフォルトの名無しさん
NGNGアイタタタ。開き直ってるよコイツ。
0723デフォルトの名無しさん
NGNG0724デフォルトの名無しさん
NGNG0725デフォルトの名無しさん
NGNG0726デフォルトの名無しさん
NGNG完全な解決法も知らないくせに (・∀・)ニヤニヤ
0727デフォルトの名無しさん
NGNG0728デフォルトの名無しさん
NGNG0729デフォルトの名無しさん
NGNGitoaとか使わなければならないんでしょうか。
0730デフォルトの名無しさん
NGNGitoaとか使わなければならないんでしょうか。
0731デフォルトの名無しさん
NGNGitoaとか使わなければならないんでしょうか。
0732デフォルトの名無しさん
NGNGitoaとか使わなければならないんでしょうか。
0733デフォルトの名無しさん
NGNGstd::stringstream使え。
0734デフォルトの名無しさん
NGNGitoaとか使わなければならないんでしょうか。
0735デフォルトの名無しさん
NGNGitoaとか使わなければならないんでしょうか。
0736デフォルトの名無しさん
NGNGitoaとか使わなければならないんでしょうか。
0737デフォルトの名無しさん
NGNGitoaとか使わなければならないんでしょうか。
0738デフォルトの名無しさん
NGNGstd::istringstream
std::ostringstream
boost::lexical_cast
0739デフォルトの名無しさん
NGNGstd::stringには、文字列を数値に変換したり、数値を文字列に変換したりする関数はないんですか?
itoaとか使わなければならないんでしょうか。
0740デフォルトの名無しさん
NGNGstd::stringには、文字列を数値に変換したり、数値を文字列に変換したりする関数はないんですか?
itoaとか使わなければならないんでしょうか。
0741デフォルトの名無しさん
NGNG0742デフォルトの名無しさん
NGNGすいません、sが定義されていないって出たんですけど、
もう少し詳しく教えていただけませんか?
ところで、もう一つ質問なんですけど、
std::stringには、文字列を数値に変換したり、数値を文字列に変換したりする関数はないんですか?
itoaとか使わなければならないんでしょうか。
0743デフォルトの名無しさん
NGNGここにいる連中はgoogle以下のクズばかりだな。
0744デフォルトの名無しさん
NGNG0745デフォルトの名無しさん
NGNGでも、問題があるんですけど、
std::stringには、文字列を数値に変換したり、数値を文字列に変換したりする関数はないんですか?
itoaとか使わなければならないんでしょうか。
0746デフォルトの名無しさん
NGNG0747デフォルトの名無しさん
NGNG0748デフォルトの名無しさん
NGNG0749デフォルトの名無しさん
NGNG削除依頼も出なかったとは。
0750デフォルトの名無しさん
NGNG0751デフォルトの名無しさん
NGNG0752デフォルトの名無しさん
NGNG0753デフォルトの名無しさん
NGNGstd::stringには、文字列を数値に変換したり、数値を文字列に変換したりする関数はないんですか?
itoaとか使わなければならないんでしょうか。
0754デフォルトの名無しさん
NGNGstd::stringstream
0755デフォルトの名無しさん
NGNG0756デフォルトの名無しさん
NGNGというわけで改めて。
std::stringには、文字列を数値に変換したり、数値を文字列に変換したりする関数はないんですか?
itoaとか使わなければならないんでしょうか。
0757デフォルトの名無しさん
NGNG0758デフォルトの名無しさん
NGNG0759デフォルトの名無しさん
NGNGint a;
std::stringstream s;
a = 10;
s << a;
std::printf("%s\n", s.str());
0760デフォルトの名無しさん
NGNGなぜstringstreamまで使っておきながらprintfなのかと子一時(ry
0761デフォルトの名無しさん
NGNGたとえば次のようなソースはエラーになってしまいます。
string str="hoge";
char ch[100];
string::iterator it=str.begin();
sscanf(it,"%s",ch); <-ここがエラー
キャストで(const char*)itなどとやってもだめです。
解決方法を教えてください。
0762デフォルトの名無しさん
NGNG0763デフォルトの名無しさん
NGNG実装されているかは処理系定義です。まともな実装ほど、クラスで
実装されているように思いますが。
std::basic_string<>にはc_str()という関数があるのを知っていますか?
0764デフォルトの名無しさん
NGNG%sって書きたかったから。
0765761
NGNGただ、このポインタが指すchar配列の寿命がどれくらいか分からないので
困っているのです。
たとえばスクリプトの解読をする場合にも使っていいのでしょうか。
この場合、プログラムの最初の方でc_str()でポインタを取得し、
その後このポインタを進めていくことになるのですが。
0766デフォルトの名無しさん
NGNG心配ならc_str()から他のnewして確保した領域にコピーしとけ。
0767761
NGNG一応、itの代わりに、&(*it)でコンパイルは通り、ちゃんと動いてはいるようなのですが、
このような使い方がよいのかどうか不安です。
0768デフォルトの名無しさん
NGNGだからイテレータをそういう用途に使うなと小一時間
0769デフォルトの名無しさん
NGNGポインタにしないと速度が遅いからか?
それなら初めからstd::stringを使わない方がいい。筋違いだよ。
0770761
NGNGただ文字列はほとんどstd::stringで管理しているので、
この組み合わせができないかと思っていたんです。
C++にsscanfのような機能があればいいんですが。
ともかくもう結構です。>>766の方法でやります。
0771デフォルトの名無しさん
NGNGboost::lexical_castでも似たようなことできるのに。
0772デフォルトの名無しさん
NGNG0773デフォルトの名無しさん
NGNG> sscanfを使いたいんですよ。スクリプトの解読にはこの関数が一番使いやすいんです。
ネタかよ…
あんな糞関数を…
0774デフォルトの名無しさん
NGNGのさばる羽目になるんだ。
0775デフォルトの名無しさん
NGNG0776デフォルトの名無しさん
NGNGなぜならば、以下の保証がないから。
・std::basic_string<>の内部で、連続した単一のバッファ上にデータを保持している保証
・終端が'\0'で終わる文字列である保証
・終端以外の文字に'\0'が入っていない保証
0777デフォルトの名無しさん
NGNG開発者がインストールすれば使えるじゃないか。
そしてユーザはBOOSTをインストールしなくても良い。
0778デフォルトの名無しさん
NGNG0779デフォルトの名無しさん
NGNG0780デフォルトの名無しさん
NGNGSTL素敵やん
0781デフォルトの名無しさん
NGNG0782デフォルトの名無しさん
NGNGスレ違いスマソ
0783デフォルトの名無しさん
NGNG0785デフォルトの名無しさん
NGNGDinkumware のバグ修正を手でやってます?
何か一発修正してくれるツールとかありませんか?
0786デフォルトの名無しさん
NGNG0787デフォルトの名無しさん
NGNGSTLport は VC6 と相性いいですか?
使いやすいですか?
0788デフォルトの名無しさん
NGNG0789デフォルトの名無しさん
NGNGVC7.1 の STL と比べてどうでしょうか?
0790デフォルトの名無しさん
NGNG0791デフォルトの名無しさん
NGNGヤラシイナオマエ
0792deque
NGNG0793デフォルトの名無しさん
NGNG0794デフォルトの名無しさん
NGNG0795デフォルトの名無しさん
NGNGその会社なら○ヤノンじゃないのか?
0796デフォルトの名無しさん
NGNGお手洗いだったか
0797デフォルトの名無しさん
NGNG0798デフォルトの名無しさん
NGNGただ俺にはキセノンに見えてしまうという罠。
0799デフォルトの名無しさん
NGNGだれか次のようなプロトタイプを持つ、
stringの前後にある空白文字を除去するプログラムを作ってください。
お願いします。
std::string trim(std::string str)
{
/*ここに空白除去のコードを書く*/
return str;
}
0800デフォルトの名無しさん
NGNG0801デフォルトの名無しさん
NGNG素直にboostのstring algorithmにあるtrimを使う方がいいんじゃないかと…
STLスレなんだけどな('A`)
0802デフォルトの名無しさん
NGNG{
std::string::size_type b = src.find_first_not_of(space);
return src.substr(b, src.find_last_not_of(space) - b);
}
最発明ってほどのことでもないだろ
0803デフォルトの名無しさん
NGNGspaceはconst char *でもいいんじゃないか?
0804デフォルトの名無しさん
NGNGfind_last_not_of の戻り値って、引数に含まれる文字を指すの?
そうじゃないと、1文字減っちゃうよね?
0805デフォルトの名無しさん
NGNGconst char*からconst std::string&への暗黙の変換はあるが逆はないからこういう場合はconst char*よりconst std::string&のほうが潰しが効く。
>>804
+1してないから喰われてるな、たしかに。
0806デフォルトの名無しさん
NGNGT[N][N]としたんですが このようなエラーメッセージがでました。
declaration of `T' as multidimensional array must have
bounds for all dimensions except the first
これってなんですか?教えてください。
0807デフォルトの名無しさん
NGNG実装による。
0808デフォルトの名無しさん
NGNGそれならCString::TrimLeft()を使うのもありだな
0809デフォルトの名無しさん
NGNG0810デフォルトの名無しさん
NGNG歌を作った人は、べつにビスケットが割れることによって数量が増えるということを
意図したわけではありませんよ?
0811デフォルトの名無しさん
NGNG0812デフォルトの名無しさん
NGNGCStringのソースを参照するというなら兎も角、そのまま使うというならスレ違いだな。
0813デフォルトの名無しさん
NGNG流れを嫁
0814デフォルトの名無しさん
NGNG0815デフォルトの名無しさん
NGNGいろいろ応用できるってことだよー にゃんにゃん
0816デフォルトの名無しさん
NGNG最近良く見るその語尾のにゃんにゃんっての元ネタ何?
0817デフォルトの名無しさん
NGNG連続したスペースなどだったら使えないな〜
0818デフォルトの名無しさん
NGNG0819デフォルトの名無しさん
NGNGホワッツマイケル
0820デフォルトの名無しさん
NGNG817と同じ意味かどうかは知らんが、
src内にスペース以外の文字が一つも含まれていなければ失敗するね。
0821デフォルトの名無しさん
NGNGstd::list<int> vallist;
val=*vallist.end();
この時valには何が入るんですか?
0822デフォルトの名無しさん
NGNG動作そのものが未定義
0823デフォルトの名無しさん
NGNG0824デフォルトの名無しさん
NGNGそりゃ、未定義だもん。どうなったって規格上OK。
ダメって定義されてるならコンパイル通らないだろうけどさ。
(そもそも静的にはチェックできないが。)
0825デフォルトの名無しさん
NGNG君が言っている事は
int a[10], i;
i = a[10];
でコンパイルが通るな、と言っているのと意味的にほとんど変わらん。
0826デフォルトの名無しさん
NGNGまあ答えは"intと同じサイズのゴミ"なわけだが。(俺の環境では)
0827デフォルトの名無しさん
NGNG実装系依存
0828821
NGNGどうしたらいいのかということだ。でも簡単にするために>>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()である
}
0829821
NGNG最初にvalueがxと一致した要素を返すものです。
もし一致する要素がなければ、エラーということにしたいのですが、
この時何を返してたらいいのかが分からないのです。
エラー判定用の引数をつけるという方法もありますが、あまりスマートではないので。
0830デフォルトの名無しさん
NGNGなぜfind_ifを使わない
0831デフォルトの名無しさん
NGNGlist<Hoge>::iteratorを返すようにすればFind(foo) == hogelist.end()で比較できる。
ってこれじゃ830の言う通りfind_if()で代用できるじゃないか。
0832デフォルトの名無しさん
NGNG0833821
NGNG0834デフォルトの名無しさん
NGNGがんばれよ。
でも今後は、丁寧に質問しような。
0835デフォルトの名無しさん
NGNG0836山田
NGNGStreamReaderを使用してファイルを読み込む処理を行っています。
----------------------------------------------------
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デフォルトの名無しさん
NGNG0838デフォルトの名無しさん
NGNG・・・とかC#なんて見たこともないのに言ってみる。
0839デフォルトの名無しさん
NGNG0840デフォルトの名無しさん
NGNG最近良く見るその中学生?っての元ネタ何?
0841デフォルトの名無しさん
NGNG厨房
0842デフォルトの名無しさん
NGNG0843デフォルトの名無しさん
NGNG最近生まれた言い回しでもないし、そんなによく見るわけでもない。
0844デフォルトの名無しさん
NGNGなんとなく使うの怖くないですか?
0845デフォルトの名無しさん
NGNG0846デフォルトの名無しさん
NGNG0847デフォルトの名無しさん
NGNG0848デフォルトの名無しさん
NGNG後で列挙して delete する、っていうような作業がよく発生するんですけど、
こういうのを自動化してくれるモノはないんでしょうか。
0849デフォルトの名無しさん
NGNG0850デフォルトの名無しさん
NGNGそういうvectorの派生クラスでも自作する
0851デフォルトの名無しさん
NGNGこんなのでいい?
template<typename T>
class auto_vector : public vector<T> {
~auto_vector(void) {
// ここで delete
}
};
0852デフォルトの名無しさん
NGNGvector<hoge>* ptr = new auto_vector<hoge>;
…
delete ptr; // あぼーん
0853デフォルトの名無しさん
NGNG0854デフォルトの名無しさん
NGNG0855デフォルトの名無しさん
NGNG0856デフォルトの名無しさん
NGNG(例) HTTP_REFERRER
0857デフォルトの名無しさん
NGNG#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質問の意味がよくわかりません
list1 4 3 2 1 0
list1 3 2 1 0
と出ますがどういうことしたいのですか?
0859デフォルトの名無しさん
NGNGわかりにくくてすいません
いまlistの勉強をしてまして
list1の一番初めの要素を削除する実験をやってたんです
list1の3番目の要素を削除する方法も知りたいです
0860デフォルトの名無しさん
NGNGbeginでとったイテレータを3回インクリメントするか
std::advance
0861860
NGNG0862デフォルトの名無しさん
NGNGありがとうございました
できました
0863デフォルトの名無しさん
NGNG0864デフォルトの名無しさん
NGNG0865デフォルトの名無しさん
NGNG1
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デフォルトの名無しさん
NGNGT(const T &t){ cout << "Copy Construct" << endl; }
というコピーコンストラクタを作成してみたところ、
1
2
Construct
Copy Construct
Destruct
3
4
Destruct
という結果になりました。コピーコンストラクトされているのかな。
もうちょっと本を読んでみます。
0867デフォルトの名無しさん
NGNG0868デフォルトの名無しさん
NGNGセコイ奴
0869デフォルトの名無しさん
NGNGあなただって最初は何も知らなかったでしょう。
無知をバカにする姿勢はよろしくない。
0870デフォルトの名無しさん
NGNG0871デフォルトの名無しさん
NGNG0872デフォルトの名無しさん
NGNGEffective STLの第3項に該当情報がありました。
コピーされるのですね。んで、ポインタのコンテナにするよりも、
スマートポイントのコンテナにした方が良いということがわかりました。
>>867
ごめんなさい。
0873デフォルトの名無しさん
NGNG余計なお世話かもしれないが、auto_ptrはだめだぞ。
EffectiveSTL読んでるんだったらわかると思うが。
しかしboost::shared_ptrにstd::mem_fun適用しようとすると怒られるな。
素直にboost::mem_fn使えって事か。boostのいくつかが早く標準化
するまではこうしたゴタゴタを承知の上で使って行かなければならんなー
0874デフォルトの名無しさん
NGNG0875デフォルトの名無しさん
NGNG0876デフォルトの名無しさん
NGNGアルゴリズムでコンテナの中身をいじくる奴を動かすと大変な事になるだろが。
それに、COAPがそもそもコンパイルを通さない場合もあるし。
知ったか君は帰っていいよ。
0877デフォルトの名無しさん
NGNG| ,.ゝ─-,.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デフォルトの名無しさん
NGNGauto_ptrはリソース・リーク対策だけに限定して使うべきだ。
0879デフォルトの名無しさん
NGNG0880デフォルトの名無しさん
NGNG0881デフォルトの名無しさん
NGNG0882デフォルトの名無しさん
NGNGauto_ptrの使い方を知らないバカ
>>876 >>878
だからそうだと言っている。
0883デフォルトの名無しさん
NGNGsetは[]使えないんですか?
iterator使うしかなんでしょうか。
0884デフォルトの名無しさん
NGNGsetの場合はhoge[n]のように要素番号を指定できないのでしょうか?ということです。
例えばforループのなかで中身を取り出すだけで
わざわざiteratorを用意するのは面倒くさいなと思いまして。。。
0885デフォルトの名無しさん
NGNG>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 []を実装するのは自由です
0886885
NGNG0887デフォルトの名無しさん
NGNG>わざわざiteratorを用意するのは面倒くさいなと思いまして。。。
ちなみにこの理由でiteratorを使わないのはどうかと思いますよ
0888デフォルトの名無しさん
NGNGそれはそうとみんなsetとmapどう使い分けてるんだろう・・・
0889デフォルトの名無しさん
NGNG0890デフォルトの名無しさん
NGNG0891デフォルトの名無しさん
NGNG茶碗:叩かれる
(・∀・ )っ/凵 ⌒☆チン
0892デフォルトの名無しさん
NGNG0893デフォルトの名無しさん
NGNG0894デフォルトの名無しさん
NGNG0895デフォルトの名無しさん
NGNGC++, awk, sed, csh, sh, JavaScript
を使い分けてます。
0896デフォルトの名無しさん
NGNG継承しなくてもグローバルにtemplate<typename T> operator [](std::set<T> Set, std::size_t n)ってできなかったっけ?
これができるんだったらtemplate<typename T> operator [](T Container, std::size_t n)にした方がいいような。
0897デフォルトの名無しさん
NGNG言いたかったのは
>ただライブラリはそののまま使わなくてもいいのですよ
です
継承はまぁ例です
ちなみにグローバルにoperator []は定義できませんよ
0898デフォルトの名無しさん
NGNG0899デフォルトの名無しさん
NGNG0900デフォルトの名無しさん
NGNG0901883
NGNG参考になりました。ひとまずiterator使うのに慣れるようにします。
ありがとうございました。
0902デフォルトの名無しさん
NGNG0903デフォルトの名無しさん
NGNG0904デフォルトの名無しさん
NGNGそのクラスにvectorのメンバ変数が存在します。
このままだと普通に保存できないんですが、どうしたらいいんでしょうか?
このvector変数はprivateになってます。
0905デフォルトの名無しさん
NGNGシリアライズ/デシリアライズ処理を自分で書く
0906デフォルトの名無しさん
NGNG0907デフォルトの名無しさん
NGNG0908お願いします
NGNGhttp://pc5.2ch.net/test/read.cgi/tech/1101473340/86
0909デフォルトの名無しさん
NGNG本当に
int& c = counter[*it];
で落ちてるの?
if (counter.find(*it) == counter.end()) {
counter.insert(ValueCounter::value_type(*it, 0));
}
いれて動くからといって原因がここだとは限らないよ
ちなみにg++では正常に動いているように見える
0910908
NGNGええ、たしかにそこで落ちました。
詳しくいいますと、map.insert() の実装のツリーの中で落ちました。
以前は元のままでも VC6 で動作したのですが、
プログラムを複雑にしているうちに、
そこでエラーが発生したんです。
VC6 のバグではないかなとも思うのですが。。
0911デフォルトの名無しさん
NGNG確率ととしては(以下省略いたします
0912デフォルトの名無しさん
NGNG0913デフォルトの名無しさん
NGNGOTL ってなんですか?
0914デフォルトの名無しさん
NGNG0915デフォルトの名無しさん
NGNG0916デフォルトの名無しさん
NGNG0917デフォルトの名無しさん
NGNGO=頭
T=腕
L=足
顔文字というか体文字?
0918デフォルトの名無しさん
NGNGtemplate<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デフォルトの名無しさん
NGNG0920デフォルトの名無しさん
NGNGvector<MyClass*> v1, v2;
v1 = v2;
はコンパイルを通るのですが
vector<const MyClass*> v1;
vector<MyClass*> v2;
v1 = v2;
だとコンパイルを通りません。
もちろんassignメソッドなどを使ってコピーするなりすれば値のコピーはできるのですが
それだと関数の引数がconstになっている場合などはconstの一時変数を作ってコピーを
行った後でその変数を引数として渡すというような処理が必要になります。
上記のような場合やdoubleのvectorにintのvectorを代入したいといった場合は
どのような処理をするのが望ましいのでしょうか?
0921デフォルトの名無しさん
NGNG0922920
NGNG説明不足ですみません。
vector<MyClass*> vec;
MyClass *obj = new MyClass();
vec.push_back( obj );
のようになっているとして、上記の変数vecを
void func(const vector<const MyClass*> &);
のような内部でvectorの要素のオブジェクトの変更を行わない関数の引数として
func( vec );
のように使用するとコンパイルができない。
という趣旨の質問です。
0923デフォルトの名無しさん
NGNGまったく違う型だから、代入とかコピーとかできませんよ。
別の型が格納されたコンテナ間のコピーをするための
テンプレート関数でも書けばどう?
0924デフォルトの名無しさん
NGNG正攻法 func(vector<const MyClass*>(vec.begin(), vec.end()));
キャストfunc(reinterpret_cast<vector<const MyClass*>&>(vec));
何度もやるのならこういうことするinline関数を書けば良いさ。
0925920
NGNGなるほど。違う型の扱いになるんですか。
const char*にchar*が代入できるのと同じ感覚で代入できるのかと思ってました。
勉強になりました。
>>924
これだと一時変数を作ったりしないで望んだ動作ができそうです。
アドバイスありがとうございました。
0926デフォルトの名無しさん
NGNGこの中から最大値を求めるには STL 的にスマートに書くとどうなるでしょうか?
data に格納されているサイズは int data_size としてあらかじめ分かっています。
よろしくお願いします。
0927デフォルトの名無しさん
NGNG0928デフォルトの名無しさん
NGNG0929デフォルトの名無しさん
NGNGすいません、有難うございます。
data を含むコンテナを生成して、そこからイテレータを作らないといけないのかな、
と思っていたのですが、ポインタはそのままイテレータとして使えるのですね。
0930デフォルトの名無しさん
NGNGstlのstringを使っているのですが
まだ、使い慣れなくて
標準関数のstrstrとかstrcmpとか
色々と標準関数と合わせての使用が多くなっているのですが、
stringの仕様がよくわからないもので値を受け取るときなど
いちいち
char temp[256];
memset(temp,0,sizeof(temp));
strncat(temp,(char*)temp_str.c_str(),5);
string dir = temp;
とかやっております。
なにか文字列関数を使うたびにこんなことやっておりますが
実際はどう使ったらいいものなのでしょうか?
0931デフォルトの名無しさん
NGNGoperator=
0932デフォルトの名無しさん
NGNGC++標準ライブラリ、チュートリアル&リファレンス
http://www.amazon.co.jp/exec/obidos/ASIN/4756137156/249-9185395-5013104
をお勧めする。
但し現在は品切れ中だそうだが。こんないい本は早く増刷して欲しい。
0933デフォルトの名無しさん
NGNGとっととstd::stringの使い方を覚えろ。
0934デフォルトの名無しさん
NGNG一文が長すぎる。しかも、「が」が多すぎる。文章は短くなるように心がけた方が伝わりやすい。
それはさておき、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( ´,_ゝ`)プッ。噴いたじゃねーか。
0936デフォルトの名無しさん
NGNG…std::basic_string<>::copy()は何のためにあるのかと。
0937デフォルトの名無しさん
NGNGとりあえずですね、
文字列を受け取るのに
一旦、char temp[256]とかにうつしてからstring dirに格納するという
動作がかなりバグの元になっているのでなんとかしたいのですが
どうにかならないものでしょうか?
できればプログラムからchar型での文字列の扱いを無くしたいと考えております。
0938デフォルトの名無しさん
NGNGdir.assign(temp_str.begin(), temp_str.begin() + 5);
こういうことですか?
0939デフォルトの名無しさん
NGNGhttp://www.wakhok.ac.jp/~sumi/stl/
0940デフォルトの名無しさん
NGNGいえ、Win32の関数からも文字列を取得したいときがあるので
関数の引数から直接値を取得したいということです。
例えばstrcat(strcatはstring使ってるときは必要無いですが)の
第一引数から取得できる文字列を直接stringに格納したいということです。
0941デフォルトの名無しさん
NGNGchar c[256];
// ...cに何かする。
std::string s = c; // OK!
0942デフォルトの名無しさん
NGNG0943デフォルトの名無しさん
NGNGstd::stirng buff;
getline(cin, buff);
if (!cin.good()) break;
}
とか
int c;
std::stirng buff;
while ((c = getchar()) != EOF) buff += char(c);
0944デフォルトの名無しさん
NGNGstd::string buff, temp;
while (std::getline(cin, temp)) buff += temp;
0945デフォルトの名無しさん
NGNG>いえ、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;
}
0946945
NGNGう〜む
0947デフォルトの名無しさん
NGNGみんな>940の意味がわかるのか。すげーな。
漏れは意味わかんなかったよ。
0948デフォルトの名無しさん
NGNGWin32限定でスレ違いっぽくて申し訳ないんだけれども、
GetPrivateProfileStringとか使いたいときはどうしてる?
マジックナンバー使わないとどうしようもないと思うんだ
けれども。
0949デフォルトの名無しさん
NGNGnSize = 1 からはじめて、戻り値が nSize - 2 以下になるまで nSize を倍倍にしながらループ。
0950デフォルトの名無しさん
NGNG0951デフォルトの名無しさん
NGNGnSize = 256 からはじめれば満足か?
0952デフォルトの名無しさん
NGNG0953デフォルトの名無しさん
NGNGじゃぁどうすればもうすこしマシになるんだ?
0954デフォルトの名無しさん
NGNG恐らくは、WritePrivateProfileStringなどで書き出すんだろうから必要な長さは充分予測可能では?
その長さを初期値としてGetPrivateProfileStringを呼び出し、戻り値を得る。その戻り値によって
切り詰められたことが判った場合に再度呼ぶか切り詰められたままかエラー処理するかは仕様次第。
0955デフォルトの名無しさん
NGNG俺も952がどうやってるのか興味ある。煽りじゃない。教えてくれ
0956デフォルトの名無しさん
NGNG放っとけよ。
0957デフォルトの名無しさん
NGNG0958デフォルトの名無しさん
NGNG>>934あたりがそういう意味のことを言ってるな
0959デフォルトの名無しさん
NGNG>934が言っているのはそのケース限定では?
0960デフォルトの名無しさん
NGNGくだ質とか初心者に行けよ。
0961デフォルトの名無しさん
NGNG0962デフォルトの名無しさん
NGNG0963デフォルトの名無しさん
NGNGお前らなんか消えちゃえ
0964デフォルトの名無しさん
NGNG0965デフォルトの名無しさん
NGNGSTL じゃないからでは?
0966デフォルトの名無しさん
NGNG君の言うSTLの定義とは?
0967デフォルトの名無しさん
NGNG0968デフォルトの名無しさん
NGNG0969デフォルトの名無しさん
NGNG0970デフォルトの名無しさん
NGNGconst NUM_256 = 512;
0971デフォルトの名無しさん
NGNGSTLはコンテナやそれに対するアルゴリズムの部分。
文字列は違う。
STL∈標準ライブラリでSTL=標準ライブラリじゃないぞ。
0972デフォルトの名無しさん
NGNGstd::stringだってchar型を格納するコンテナだろ。
0973デフォルトの名無しさん
NGNG格納するデータの型が固定されてるものは普通コンテナとは呼ばない。
0974デフォルトの名無しさん
NGNGおいおい。まさに>>967だ。
std::stringはstd::basic_string<char>のシノニムだぞ。
0975デフォルトの名無しさん
NGNGC++ 標準ライブラリとして採用された汎用コンテナと汎用アルゴリズムを
指すもの。
string だの iostream だのは含まれないし、ある特定の条件を満たせば
STL と呼べる、って類の話じゃないんだが。
0976デフォルトの名無しさん
NGNGhttp://mentai.peko.2ch.net/prog/kako/965/965248105.html
0977デフォルトの名無しさん
NGNGなにがおいおいだか。
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デフォルトの名無しさん
NGNG0979デフォルトの名無しさん
NGNG0980デフォルトの名無しさん
NGNGそれは日本語版のP567だな。都合のいいとこだけ抜き出すなよ。w
---------------------------
17.5 "おおよそコンテナ"
組み込み配列、string、valarray、bitsetは、要素を保持する型であり、
多くの用途でコンテナとみなすことができる。しかし、これらは標準コン
テナインターフェイスが提供するあれこれの機能を持たないので、
これら”おおよそ”コンテナは、vectorやlistといった完全なコンテナと
完全に交換可能な形で使うことはできない。
17.5.1 string
basic_stringは、添字演算子、ランダムアクセス反復子のほか、コンテナが
持つ便利な記述形式の大半を提供する。しかし、basic_stringで使える要素型
の選択肢は狭い。basic_stringは文字列としての用途に最適化されており、
コンテナとは大きく異なる形で使われることが多い。
---------------------------
いずれにせよ、型の固定云々は関係ないが。
0981デフォルトの名無しさん
NGNG> いずれにせよ、型の固定云々は関係ないが。
書いてあるよ。
「しかし、basic_stringで使える要素型の選択肢は狭い。」
この要素の型の制約がきついから(それだけじゃないが)、完全なコンテナになりきれない
って文脈で書いてあるんだよ。
0982デフォルトの名無しさん
NGNGSTLのコンテナではないんだっけか。
0983デフォルトの名無しさん
NGNG0984デフォルトの名無しさん
NGNGいらね
C++相談室と分ける合理的な理由ある?
0985デフォルトの名無しさん
NGNG0986デフォルトの名無しさん
NGNG立てるなというレスが多かったら放置。
0987デフォルトの名無しさん
NGNG重複すれ多すぎ
0988デフォルトの名無しさん
NGNG今風呂からあがりました。
わかりました。放置します。
0989デフォルトの名無しさん
NGNG0990デフォルトの名無しさん
NGNG0991989
NGNG記述が見つからなかったです.具体的にどの部分ですか?
0992デフォルトの名無しさん
NGNGそうかな?
stringはおおよその意味でコンテナとは言えるが
標準コンテナのインターフェイスを完全に備えているわけではないので
完全なコンテナとは言えない。
stringはほぼコンテナではあるが、文字列としての機能に最適化されているために
完全なコンテナ(vectorとか)と同じような使い方をされることはない。
つまりstringが完全なコンテナでない理由は
「標準コンテナのインターフェイスを完全に備えているわけではない」
と云う意味に理解したけど。
0993デフォルトの名無しさん
NGNG0994デフォルトの名無しさん
NGNGContainer 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【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デフォルトの名無しさん
NGNGBOOSTを語れゴラァ
http://pc5.2ch.net/test/read.cgi/tech/1091198276/
もね。
0997デフォルトの名無しさん
NGNGSTLが使えない→STLは標準C++の一部ではない!
という思考をするDQNとみなす
0998デフォルトの名無しさん
NGNG0999デフォルトの名無しさん
NGNG1000デフォルトの名無しさん
NGNG10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。