●STL スレッド●
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
NGNG0002デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/tech/1004242305/
●とか使うなよバカ>1
0003デフォルトの名無しさん
NGNGそう思ってるなら、1に役立つリンクくらいはれよ…
0004デフォルトの名無しさん
NGNG俺は一応賛成しとく。
0005デフォルトの名無しさん
NGNGまあ、Javascriptのような言語のことだけど、とくにスレをたてるほどのものではない。
0006デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNG素直にStandard Template Libraryについて話そうよ・・・
0008デフォルトの名無しさん
NGNG0009デフォルトの名無しさん
NGNG0010デフォルトの名無しさん
NGNG0011デフォルトの名無しさん
NGNGSTLと何の関係が・・・
0012デフォルトの名無しさん
NGNG関係無くはないと思うが・・・
0013デフォルトの名無しさん
NGNGtemplate<class _Ty, class _A = allocator<_Ty> >
class vector {
これの第二引数を明示的に指定して使ってる人に、何か質問があるのでは?
私は使ったことないので知りませんが。
0014デフォルトの名無しさん
NGNGこれ?
http://www.dinkumware.com/vc_fixes.html
あと VC6 は new が失敗したときに std::bad_alloc を投げずに 0
を返してくるのけど、STL はそれを意識したコードになっていないので、
メモリ保護違反が発生する可能性あり。_set_new_handler() で対処し
ましょう。
バグの件はさておくにしても VC 付属の STL には auto_ptr<>.reset()
がなかったりと仕様が古い部分があるので、私は STLport 入れて使って
ます。
http://www.stlport.org/
0015デフォルトの名無しさん
NGNG0016デフォルトの名無しさん
NGNG0017デフォルトの名無しさん
NGNG0018デフォルトの名無しさん
NGNG状況が良く分からんが、デザインパターン的には Iterator を作れ、というのが一般的な回答だと
思われ。
0019デフォルトの名無しさん
NGNG使ってるがコンテナも独自なんだなこれが・・
0020デフォルトの名無しさん
NGNGそしたらコンテナも独自にナチャタ(アヒャヒャヒャ
0021デフォルトの名無しさん
NGNG作ったな。やっぱり独自コンテナになっちまうが。(アヒャ
でも基本的なアルゴリズムだからやる事はほとんど決まってんだよね。
大して考える事ない。
0022デフォルトの名無しさん
NGNGとりあえず 14 のリンク先に上がってる程度のバグは残ってないです。
>>16
いまだと STLport の方がいいんじゃないかな。私もあまり細かく実装を追ってないんので技術的な
比較は出来ないんですが、STLport の方がこまめにリリースされていて、対応するプラットホームが
多いは確かです。
STLport は 4.0 のちょっと前から VC6 と組み合わせて使ってますが、今までで困ったのは
- ATL と組み合わせると min, max でコンパイルエラーが出る(ただし簡単に回避できるし、STLport 4.5
では問題ない)
- OBSOLETE を定義しておかないと auto_ptr のコピーコンストラクタが使えない(VC6 のメンバテン
プレートの仕様が古いから)
という程度。致命的な問題には、まだ出くわしてません。
0023デフォルトの名無しさん
NGNGイテレータを保存しておけば、insertとかしたあといつでもそのベクトルの要素を指すことになるの?
0024デフォルトの名無しさん
NGNG4.5だとwindows.hとSTLPort、どっちのmin/maxが使用されるの?
0025STLPortより
NGNG(max)(size(), __n)
ナニやってんだろこれ・・
家に帰らないとわかんねーや。
0026デフォルトの名無しさん
NGNGこれは俺の環境だけ?
002725
NGNGmaxという名前のマクロ関数と
(max)という名前の関数が共存できてるみたい。
max(a, b); // これはマクロ関数
(max)(a, b); // これは関数
こんな構文ANSIにあったっけ?
002825
NGNGデバッグモードだからリークを通知してくれてるだけでは?
つまりリリースモードでも通知しないだけでリークしてる。
なんか開放し忘れてない?
0029名無しさん++
NGNGSTLPort の iostream が static で確保しているオブジェクト(曜日のフォーマットとか)が、いくつか引っかかり
ますが、これは気にしなくても大丈夫です。
リークのチェックって、何を使ってます? _CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF) を使っているなら
デバッガ出力に
> {43} normal block at 0x00343E30, 1328 bytes long.
> Data: <%a %b %e %H:%M:%> 25 61 20 25 62 20 25 65 20 25 48 3A 25 4D 3A 25
という感じで、最初に {数字} がありますよね。これを覚えておいて
1. CRT ソースの nh_malloc_dbg() にブレークポイントを設定
2. Alt + F9 でブレークポイント設定ダイアログを開く
3. 先ほど設定したブレークポイント選択して [条件] ボタンをクリック
4. スキップカウントに、デバッグ出力に出てきた数字 - 1 (上の例なら 42) を設定
でデバッガを走らせると、問題のメモリを確保しているときのスタックトレースが簡単に終えます。これで
問題があるかどうか判断して下さい。
0030デフォルトの名無しさん
NGNG0031デフォルトの名無しさん
NGNG構文でも何でもなく、Cの頃からあったマクロの回避方法だ。
max(x,y)で定義されたマクロは、
(max)(x,y)と書かれた部分に適用できない。
これはプリプロセッサの仕様だ。
で、コンパイラが
(max)(x,y)を見つけたとき、
()で囲った関数へのポインタ式 + ()で囲まれたコンマ区切りの式
->関数呼び出し
に展開する。
そんだけ
0032デフォルトの名無しさん
NGNGダサすぎる・・・・・・・・・
003325
NGNGありがとう!!
アホな俺に教えてくれて。
しかしプリプロセッサの仕様か。
可読性もイマイチだし、正直あまり使い所が見当たらないな・・。
0034デフォルトの名無しさん
NGNG念のため。realloc 入った瞬間に nh_malloc_dbg() 呼び出しとデバッガ出力の回数が一致しなくなるので、
WinMain 始まってからはカウントのとり方変えないとダメね。
0035デフォルトの名無しさん
NGNGテンプレート版や関数版使いたくて、そもそもそんなの気にしたくなければ
#undef max
好きにしろ屋ゴルァ
0036デフォルトの名無しさん
NGNGz = (((((max)))))(x,y);
とかすれば一目瞭然。
003726
NGNGありがとうございます。
#define _STLP_DEBUG 1
をして、iostreamをincludeするだけで、
{66} normal block at 0x002F5588, 792 bytes long.
Data: <September > 53 65 70 74 65 6D 62 65 72 00 CD CD CD CD CD CD
こんなのが出力されるんで、内部に問題でもあるのかなと思ってましたが
気にしなくていいんですね。でもやっぱり気になる・・・
あと、デバッグの方法は勉強になります。
0039デフォルトの名無しさん
NGNGローカルなクラスをテンプレートの引数にバインドできないんだけど(VC++)
C++の制限?
std::for_each とか、その場にファンクタ書けたら便利なのに。
0040コメント無しさん
NGNGローカルなクラスってなによ?
0041名無しさん++
NGNG仕様です。
> 14.3.1 Template type arguments
>
> 2 A local type, a type with no linkage, an unnamed type or a type compounded from any of these types shall
> not be used as a templateargument for a template typeparameter.
テンプレートを展開する際にクラス名を単純に置換できなくなる(普通にスコープを切ると、テンプレート
側ではローカルクラスは見えない)のが問題なのだと推測されますが、できれば便利ですよね。
>>40
関数内で定義したクラスのことです。
int main(void)
{
class foo {}; // これ
}
0042コメント無しさん
NGNGint main(void)
{
class foo {}; // これ
}
とか
class foo
{
class bar {}; // これ
};
とかって、正式名称なに?
0044コメント無しさん
NGNGあまりにもgoogleでひっかからないんで、ほかの名前があるかとオモタヨ
0045名無しさん++
NGNGC++ の規格書を手元に置いておくと宜しいかと。www.ansi.org から PDF 版を購入した場合 $18
です。
ISO/IEC 14882
Programming languages -- C++
http://webstore.ansi.org/ansidocstore/product.asp?sku=ISO%2FIEC+14882%2D1998
0046デフォルトの名無しさん
NGNGlocal classはあるのかー。
004739
NGNGありがとうございます。
C++の仕様ですか。了解です。
std::for_each()、使いどころ難しいってことですね
(無理して使わなくてもいいんだけど)
私も >>45 の PDF 買っておこうかな・・・
0048デフォルトの名無しさん
NGNG0049揚げ
NGNG0050揚げ
NGNGおのれ くっきーめ
0051デフォルトの名無しさん
NGNGGenericProgramming
0053デフォルトの名無しさん
NGNGサンクス。読んでみるよ。
0054login:Penguin
NGNG#if, #ifdefで使う定数、call by nameが必要なもの、以外使わないのが吉。
0055デフォルトの名無しさん
NGNGでも、STL使ってると、うまくスキップしてくれないんだけど…
なんでなんだろ。
結局、あやしいところに
int* p = new int();
とかって、わざとリークさせて場所をしぼりこんだりしてる。
使い方が悪いのかな
0056名無しさん++
NGNG> でも、STL使ってると、うまくスキップしてくれないんだけど…
デバッグウィンドウに表示される数値とスキップ回数の対応がおかしい、という話ですか?
デバッグウィンドウに表示される回数は DBGHEAP.C で定義されている静的変数 _lRequestCurr
で管理されていますが、これは nh_malloc_dbg() だけではなく realloc_help() の中でもインクリメ
ントされます。したがって、こちらが呼ばれた場合にはスキップ回数と対応が取れなくなります。
場所を特定したいだけなら _CRTDBG_MAP_ALLOC を定義して <crtdbg.h> を読み込み、メモリ管
理関数を、行番号やファイル名情報を保存するデバッグ用関数にマッピングするのが簡単です。
それだけではなく、確実にブレークポイントを設定したいなら、少し面倒ですが次の手順を踏みま
す。
1 まず nh_malloc_dbg にブレークポイントを設定してデバッガを起動する。
2 ブレークポイントで停止したらクイックウォッチ (Shift + F9) ウィンドウを開き、_lRequestCurr
変数のアドレスを調べる。(&_lRequestCurr と入力する)
3 いったんデバッガを終了する。
4 Alt + F9 でブレークポイント設定ダイアログを開き、データタブを選択。
5 評価される式の欄に *(long *)0x10205138 == 25 と入力。ただし 0x10205138 は 2 で調べた
変数 _lRequestCurr のアドレス、25 はデバッガウィンドウにリークとして検出された番号 + 1。
で如何?
0057名無しさん++
NGNG念のため。
デバッグ版のライブラリ (stlport_vc6_stldebug.lib のようにライブラリ名に stldebug が含まれているもの)
をリンクしてますよね?
0058デフォルトの名無しさん
NGNG自動でリンクされるやん
0059デフォルトの名無しさん
NGNG条件による。VC6 だと /NODEFAULTLIB 指定すると #pragma comment(lib, xxx) 無視されるし。
0060デフォルトの名無しさん
NGNGstd::listとstd::map を例外安全かつ中立な実装にできないかな?
型引数として渡されるクラスが例外安全・かつ中立であると
仮定しての話でよいです。
すでに、例外安全だったら素マン。出直してくる。
006155
NGNGありがとう!できました。
別にアドレス調べなくても _lRequestCurr == (数字) で大丈夫だったよ。
スキップでやっちゃうと確かに数あってなかった。
ちなみに
_CRTDBG_MAP_ALLOC を定義すると new が
inline void* __cdecl operator new(unsigned int s)
{ return ::operator new(s, _NORMAL_BLOCK, __FILE__, __LINE__); }
って、なるんだが、DEBUG だとinline 展開できない(pdbが作成できない)
んで、__FILE__と__LINE__が意味なくなるんで、場所特定できないんです。
STL関係なし…
006260
NGNGでもだれか、知ってたら教えてちょんまげ。
0063デフォルトの名無しさん
NGNGSTLは結構効率を気にしてそうだからな。
とりあえずthrowする部分を関数でラッピングしてみたりとか。
あるいはエラーの判断もassertみたいのでやって関数内部で例外
投げたり投げなかったりしてみたり。
006460
NGNG複数要素の挿入以外は、きちっと例外安全と中立が
保証されてます。
すまんです、出直してきます。
0065デフォルトの名無しさん
NGNG入れるにはどうすればよいのでしょうか?
要するにこんなことがしたいのですが
class A { ... } ;
class B : public A { ... } ;
void func()
{
B b ;
vector< A > v ;
v.push_back( b ) ;
}
0066デフォルトの名無しさん
NGNGそれコンパイルとおんないの?
0067デフォルトの名無しさん
NGNGコンパイルは通るけど、意図と違うと思う。
多態性はポインタで扱わないと使えません。>>65
0068デフォルトの名無しさん
NGNG0069デフォルトの名無しさん
NGNG参照でも良いだろう、と?
0070デフォルトの名無しさん
NGNG具体的には、
struct A{
string name;
string tel;
string mail;
}
のように表されるデータのリストを、それぞれ(key、value1、value2)
をキーにしてソートしたいのです。
0071デフォルトの名無しさん
NGNG0072デフォルトの名無しさん
NGNGなんか日本語が変だぞ
0073デフォルトの名無しさん
NGNG0074デフォルトの名無しさん
NGNG007570
NGNG出直して参ります。
0076デフォルトの名無しさん
NGNG違うよ、出直すべきなのはここにいるプログラムヲタクだよ。
0077デフォルトの名無しさん
NGNGあんた何者?
0078デフォルトの名無しさん
NGNGで、きっと、突っ込まれると全角文字ってなんだよって逆切れして
漢字コードの定義とインターネットで推奨されない文字コードの
フレームを作っちゃうタイプ。>>76
0079デフォルトの名無しさん
NGNGおおー、ヲタクっぽい文章だこりゃ。きっと、パソコンの前にいるのはでかいブタだな。
0080名無しさん++
NGNG素直に map を 3 つ作るのはダメなんですか?
#include <algorithm>
#include <iostream>
#include <map>
#include <string>
struct A {
std::string name;
std::string tel;
std::string mail;
A(const char *name_, const char *tel_, const char *mail_)
: name(name_), tel(tel_), mail(mail_)
{}
};
std::ostream& operator<<(std::ostream& ostream, const struct A& a)
{
ostream <<"name = " << a.name << ", tel = " << a.tel << ", mail = " << a.mail;
return ostream;
}
struct Aprint {
void operator()(const std::pair<std::string, struct A*>& pr)
{
std::cout << *pr.second << std::endl;
}
};
// 続く
0081名無しさん++
NGNGint
main(void)
{
struct A a[] = {
A("zushi", "11-1111-1111", "a@a"),
A("abe", "22-2222-2222", "b@b"),
A("etou", "00-0000-0000", "c@c"),
};
typedef std::map<std::string, struct A*> Amap_Type;
Amap_Type amap_name, amap_tel, amap_mail;
// map を作っとく
for (size_t i = 0; i < sizeof(a) / sizeof(a[0]); ++i) {
amap_name[a[i].name] = &a[i];
amap_tel[a[i].tel] = &a[i];
amap_mail[a[i].mail] = &a[i];
}
Amap_Type::iterator it;
// sort by name
std::cout << "-- sort by name -- " << std::endl;
std::for_each(amap_name.begin(), amap_name.end(), Aprint());
// sort by tel
std::cout << "-- sort by tel -- " << std::endl;
std::for_each(amap_tel.begin(), amap_tel.end(), Aprint());
// sort by mail
std::cout << "-- sort by mail -- " << std::endl;
std::for_each(amap_mail.begin(), amap_mail.end(), Aprint());
return (0);
}
0082デフォルトの名無しさん
NGNGどこが素直になのかイマイチわからん
>>70
素直に比較用の関数オブジェクト作って list の sort に渡せばいいんじゃないの
0083デフォルトの名無しさん
NGNGえーと、おれ70じゃないんだけど、こんな感じでいいんでしょか?
struct A { string name, tel, mail; ... };
struct sortbytel : public greater< A > {
bool operator()(A& x, A& y) { return x.tel < y.tel; }
};
list< A > alist;
alist.sort(sortbytel());
VC5で試そうとしたら、list<T>::sortがヘタレで動作確認できませんでした。
(どんな比較関数渡してもgreaterが使われる)
008482
NGNG比較関数オブジェクトは greater から派生する必要ないです。
ただ、VCに付いてるSTLはヘタレなので通りません。
どっかから別のSTL持ってくるとか、
某land使うとか、gcc使うとかしてください。
0086デフォルトの名無しさん
NGNGSTLには名前空間 stdがついていますか、
std::stringみたいに、いちいち指定していますか?
using namespace std; で済ましているのはダメ?
0087デフォルトの名無しさん
NGNGいちいち指定してられますか。
当然 using やってますよ。
影響が他に及ばないように、
自分のネームスペースの中でだけど。
0089デフォルトの名無しさん
NGNGusing std::string;
using std::vector;
using....
009070
NGNG>>80,81(名無しさん++ さん)
そう言えばそう言う手段もありましたね。
ただ、想定しているデータの量が8千件オーバーっぽい感じなので、
3倍メモリを食うのは辛いかも知れません。
まあ、最近のPCですし、メモリもたかが知れてますが……
>>82 さん
比較用の関数オブジェクト、ですか。助言ありがとうございます。
初心者のくせに中途半端のままSTLの利用をはじめたという状態で、
手元にある参考書が(よりにもよってプログラマー板の必読書スレで
叩かれてる)標準C++:STLの基礎知識という本だけで、他に参考に
出来るものが無い状態……。
これ、という参考書や参考になるHPなどはありませんでしょうか?
自分なりに捜したつもりですが、関数オブジェクトの自作に関して
書かれているようなHPというのが見あたらない……。
やっぱり勉強が足りないです。修行し直してきます。
0091名無しさん@Emacs
NGNG>>51 さんも言ってるけど漏れも
"Generic Programming -STLによる汎用プログラミング-"
はイイと思うぞ.
ASCII から出てて,4800円 + tax
ISBN4-7561-3441-6
009282
NGNG関数オブジェクトは、関数っぽく呼べるオブジェクトのことで、
要するに operator() を実装したクラスのこと。
本当は binary_function から派生するべきなんですが、
そんなことしなくても全然使えます。
83氏が書いてるよーな
struct sortbytel{
bool operator()(const A& x, const A& y) { return x.tel < y.tel; }
};
ってヤツです(多少修正しました)。
inlineにするとスピードアップして幸せ。
009383
NGNGどもー。84で某ランド薦めてもらったので、BCC5.5.1を落としてみました。
92のコードもきっちりコンパイルできました。ああそれにしてもVCの馬鹿野郎!
というわけで、これでSTLの勉強が進められます。ありがとです。
0094デフォルトの名無しさん
NGNGlistをソートさせたいと考えています。(クラスStudentの
メンバ変数 string name; をキーにしてソートさせたい)
70の方とやりたいことは同じだと思うんですが・・
↑の方々の説明だけではまだ良く分かりません。
どのようにすればいいか教えてもらいたいんです。
>>82
>比較用の関数オブジェクト作って list の sort に渡せばいいんじゃないの
↑この部分をもう少し詳しく教えてほしいです。
お願いします。
0095デフォルトの名無しさん
NGNGoperator=とoperator<実装するだけでいけるよ。
0096デフォルトの名無しさん
NGNGstatic bool compareFunc(const HOGE &a, const HOGE &b) {
return a < b;
}
で、hlist.sort(compareFunc);
とか
class CompareClass {
public:
int _c;
CompareClass(int n) : _c(n) {}
bool operator()(const HOGE &a, const HOGE &b) {
++n;
return a < b;
}
};
で hlist.sort(CompareClass(0)); とか。
009796
NGNG0098デフォルトの名無しさん
NGNG0099デフォルトの名無しさん
NGNG0100デフォルトの名無しさん
NGNG0101デフォルトの名無しさん
NGNG++nは++_cですよね、そのカウンタ_cの最終値を取り出す方法が
わからないっす。どうやるんだろ…。
0102デフォルトの名無しさん
NGNG`__`と`_`+英大文字で始まるのは予約語。
_+英小文字は「だめ」とは明文化されていません。
0103デフォルトの名無しさん
NGNG0104デフォルトの名無しさん
NGNGarmやk&r読まないのって、やっぱ、罪だよな。
010696
NGNG関数ポインタも渡せる以上関数オブジェクトを
値コピーでなく参照渡しにすることはでけんのかな
つーことで、今試してみたけどstaticにするとか
自オブジェクトの外の何かを更新するとかしかなさそう
0107105
NGNGども。あれからドキュメントひっくり返して見てたら、
for_eachなんかは第3引数の関数オブジェクトがそのままfor_eachの戻り値になるから
staticじゃないメンバも取得できるんですね。STLっておもしれー。
0108デフォルトの名無しさん
NGNG後で試してみよう
0109デフォルトの名無しさん
NGNG各要素へのポインタを持つ配列を一時的に作ってやった方が
何倍も速いよ。特に何度もソートする場合は。
0110デフォルトの名無しさん
NGNG0111デフォルトの名無しさん
NGNGなんでlistにこだわってるのかわからないね。
0112デフォルトの名無しさん
NGNG0113デフォルトの名無しさん
NGNG0114デフォルトの名無しさん
NGNG011594
NGNGlistにこだわっているのは"sort"するよりも
list内を順次辿る処理が多いからです。"sort"は
常にするのでなく必要な時に行う処理としています。
質問の具体例に出したクラスがまずかったです。
シンプルに例をあげようと思いまして。。
でもlistをsetに乗り換えてもいいのかなとも思えてきました。
ソートしながら追加してくれて便利だし,それほど処理時間に
大差が無いのであれば・・
011694
NGNG↑にちょうどいいサンプルがありました。皆さんのご助言と
このサンプルを見ると、setでoperator"<"を使うと自動的に
キーを参照してソートしてくれることまでは分かりました。
ただ、なぜoperator"<"を使うとそのような処理ができる
のかが分かりません。このoperator"<"は
>>96さんが例示してくれたサンプルのCompareFuncとも
似ているようですが・・
↑のページのサンプルを参考にして,
Class HOGE に
string name;
というメンバ変数があったとして
list<HOGE> hlist;
bool compareFunc(const HOGE &a) const{
return name < a.name;
}
hlist.sort(compareFunc);
とすればClass Hogeの要素はnameをキーにして
アルファベット順に追加されるようになるんでしょうか?
基礎的な部分っぽいですが、教えて下さい。
お願いします。
011794
NGNG>...とすればClass Hogeの要素はnameをキーにして
>アルファベット順に追加されるようになるんでしょうか?
...とすればClass Hogeの要素はnameをキーにして
"アルファベット順にソートされるんでしょうか?”
の間違いです。すみません。
0118デフォルトの名無しさん
NGNGを作っておけばよい。
011994
NGNGしつこくてすみません。
もう少し詳しく教えて下さい。
0120デフォルトの名無しさん
NGNG#include <algorithm>
#include <iostream>
#include <list>
#include <string>
std::ostream& operator<<(std::ostream& ostream, const struct A& a);
struct A {
std::string name;
std::string tel;
std::string mail;
A(const std::string& name_, const std::string& tel_, const std::string& mail_)
: name(name_), tel(tel_), mail(mail_)
{}
struct Sort {
struct ByName {
inline bool operator()(const A& a1, const A& a2)
{
return a1.name < a2.name;
}
};
struct ByTel {
inline bool operator()(const A& a1, const A& a2)
{
return a1.tel < a2.tel;
}
};
struct ByMail {
inline bool operator()(const A& a1, const A& a2)
{
return a1.mail < a2.mail;
}
};
};
class PrintLn {
std::ostream& ostr;
public:
PrintLn(std::ostream& ostr_ = std::cout)
: ostr(ostr_)
{}
inline void operator()(const A& a)
{
ostr << a << std::endl;
}
};
};
0121デフォルトの名無しさん
NGNGstd::ostream& operator<<(std::ostream& ostr, const struct A& a)
{
ostr << "name = " << a.name << ", tel = " << a.tel << ", mail = " << a.mail;
return ostr;
}
int
main(void)
{
std::list<A> list;
list.push_back(A("zushi", "11-1111-1111", "a@a"));
list.push_back(A("abe", "22-2222-2222", "b@b"));
list.push_back(A("etou", "00-0000-0000", "c@c"));
std::cout << "-- sort by name -- " << std::endl;
list.sort(A::Sort::ByName());
std::for_each(list.begin(), list.end(), A::PrintLn());
std::cout << "-- sort by tel -- " << std::endl;
list.sort(A::Sort::ByTel());
std::for_each(list.begin(), list.end(), A::PrintLn());
std::cout << "-- sort by mail -- " << std::endl;
list.sort(A::Sort::ByMail());
std::for_each(list.begin(), list.end(), A::PrintLn());
return (0);
}
012394
NGNGご親切にどうも。ほんと勉強になります。
012470
NGNGちょうど私のやりたかったのもそのような感じでした。
説明ヘタすぎ……鬱。
このソースでビルドしようとしたところ、「ist.sort(A::Sort::ByName())」の
部分でエラーが出ました。これが>>82 さんの言うVC6のだめな部分なのでしょうか?
私のところでは利用するPCの都合でBCCを入れたりSTLPortを入れたりが出来ないのですが、
VC6で同様の処理をしようとした場合、どのようにすればいいでしょうか?
0125デフォルトの名無しさん
NGNG・・・。
list をやめて vector か deque にする。
0126デフォルトの名無しさん
NGNG012894
NGNG皆さん,本当にありがとうございました!
0129デフォルトの名無しさん
NGNG0130デフォルトの名無しさん
NGNGそうなん? サンプルコードあったら、Copy & Paste かリンクを希望。
0131デフォルトの名無しさん
NGNG期待age
0132デフォルトの名無しさん
NGNG0133デフォルトの名無しさん
NGNG0134デフォルトの名無しさん
NGNGhttp://www.s34.co.jp/cpptechdoc/article/sort/index.html
なんてのはどうなんでしょう
0135デフォルトの名無しさん
NGNG転職すれば?
0136デフォルトの名無しさん
NGNG0137デフォルトの名無しさん
NGNG絶対的解は有りえないが御意見頂戴。
0138デフォルトの名無しさん
NGNGコンパイル時に解決される項目の多いSTLの方がラク。
苦しいたとえだが、
DLLよりスタッティックリンクがトラブル少な目なように。
0139デフォルトの名無しさん
NGNG0140デフォルトの名無しさん
NGNGインターフェースに対してプログラミングするオブジェクト指向プログラミングのパラダイムと、
型をパラメタ化する Generic Programming は、対立するよりも相互補完する関係にあると思
うが。
0141デフォルトの名無しさん
NGNG0142デフォルトの名無しさん
NGNG0143デフォルトの名無しさん
NGNGあとの半分は、行き場と根拠と品性のないプライドか何かですか?
0144デフォルトの名無しさん
NGNG0145デフォルトの名無しさん
NGNG0146デフォルトの名無しさん
NGNGRubyまんせー係の人と、Rubyは糞係の人(合わせて一人以上)がいるから。
暇になると適当な言語のスレにどっちかを書いて撒餌。
厨房が寄ってきてどうでもいいことを書き散らす。
たちが悪いのはスレ住人が無視しても自作自演で続けること。
VB、HSP、Delphi、Ruby などある程度のユーザがいるが
簡易言語系、マイナー系に属する言語が対象となる。
書き込みの特徴
・○○ (言語名だけ連呼)
・○○>>>>○○ (根拠のない比較)
・○○は○○でできている
・○○は実用性がない/将来性がない/遅い (理由を示さず)
・○○を使っているやつは糞
・○○があるから必要がない
0147デフォルトの名無しさん
NGNG全部やった事あるある。ヒッキーだから暇ある。鬱ある。
0148デフォルトの名無しさん
NGNGしれず。(__node_alloc は malloc/new してきたチャンクを、必ずしも返してない)
#define _STLP_USE_MALLOC
これで node allocator を使わずに全部 malloc 使って確保するようになるけど、どう?
0149デフォルトの名無しさん
NGNG0151デフォルトの名無しさん
NGNG使うときはみなさんどうしますか? 勝手に平衡にされると困って
しまうんです。レイトレーシングの光の追跡に使うんですが・・・。
0152デフォルトの名無しさん
NGNG0153デフォルトの名無しさん
NGNGどの部分に使うの?シーングラフじゃないよな
カメラからの場所の切り分けか?それならBSPを実装するのがよろし
STL関係は便利な反面new deleteとかソートとかサーチが入るコンテナが
多いからレイトレみたいなプリミティブな実装で済むandタイトな場合は自分で
実装したほうが良いと思うぞ
あんまりSTLと関係ないな sage
0154デフォルトの名無しさん
NGNGでも同じ考えの人がいてくれてチョトうれしい(w
0155151
NGNGその構造を二分木で保存したいのです。
やっぱ自分で実装ですかね・・・。
0156デフォルトの名無しさん
NGNGなるほど。ちょっと脱線だけれど、
木構築してどうするの?
最後にその木を使って追っていくってことかな?
再帰のほうが楽そうだけれど。
で、そのbinary treeだったら自作してもほとんど苦労しないような気がしますが・・・?
0157151
NGNG考えてみたら再帰で充分ですね・・・。
自作はやっぱりテストまで含めると若干面倒なのと、
みなさんどうしてるのかな、ってことが気になったもので。
キューやスタックなどの単純なコンテナがあるのに、
二分木がないのも不思議だったんです。
0158デフォルトの名無しさん
NGNG0159151
NGNGよろしければ、その違いを説明してくれませんか?
ぼくとしては、TC4のコンテナクラスにはただのバイナリツリーはあったし、
データ構造としてキューもスタックも二分木も並列関係にあると思って
いるんですが・・・。
0160デフォルトの名無しさん
NGNG158 じゃないけど、純粋な B-Tree を必要とする用途は限られているから、敢えて標準
ライブラリには入れなかっただけじゃないかな。
#あまり技術的な話じゃないんで sage
0161デフォルトの名無しさん
NGNGそれを使ってみるというのはどうか
0162デフォルトの名無しさん
NGNGB-Treeとバイナリツリーは別物ですよ。
私も昔間違えましたが・・・。
0163デフォルトの名無しさん
NGNG158じゃないけど、>>160 というよりも、
意味が違うという感じ。
「スタック」「キュー」は「用途」「インターフェイス」であってユーザの関心事だけど、
「二分木」「赤黒木」というのは「実装」であってユーザの
関心事でないということ、だと思う。つまり、set/mapが何を使って実装されているかは
問題でない、ということではないかな。
0164デフォルトの名無しさん
NGNG検索してみたら B木というと、各ノードが保持するキーと子供の数が可変なのね。なるほど。
(いままで Binary Tree の略かと思ってたよ)
0165デフォルトの名無しさん
NGNG0166デフォルトの名無しさん
NGNG考案者は Bayer というから、それと関係するかも。
0167デフォルトの名無しさん
NGNG0168デフォルトの名無しさん
NGNG0169151
NGNG確かに、純粋な二分木を必要とする事って現実的には
あまりないかもしれませんね。
ただ、実装も大した手間じゃないだろうし、あって損は
ないのにな、という感は拭えませんが。
0170デフォルトの名無しさん
NGNG作ったら、ベクターあたりで公開すると他の人が ウマー かも。
0171デフォルトの名無しさん
NGNG0172デフォルトの名無しさん
NGNG同じ動作(と思う)のメンバ関数がありますけど、
どっちかが非推奨だったりするんでしょうか?
0173158
NGNG今更ですが、自分は>>163に書いてあるようなことのつもりで書きました。
「二分木」を使って実装された「スタック」とかいうのもありえるわけです。
(STLでそういう実装をしてるところはないはずですが)
0174デフォルトの名無しさん
NGNGlength()とsize()は一緒だが、data()とc_str()は別だぞ。
c_str()は末尾に'\0'が付加されるがdata()だと付かない。
length()に関しては文字列に長さがないのも変だろうって
程度の理由だったと思った。
0175デフォルトの名無しさん
NGNGc_str() は '\0' つきの文字列を返すのに対して、data() は '\0' がついていない配列を
返す(正確には size() バイト分のデータしか保証されないので、その後に '\0' がくる
ことは保証されない)という違いがある。
#たいていの実装では c_str() も data() も '\0' つきの配列を返してくるけど。
0177デフォルトの名無しさん
NGNGBalanced tree
0178デフォルトの名無しさん
NGNG・・・違うと思う。
0179デフォルトの名無しさん
NGNG0180177
NGNGそっか、語源の話ね。セジウィックの本に、
「ここではそれ (註: "B-tree" という語のこと) を "外部探索の
ための平衡木" をさす総称的な用語として使う。」ってな説明が
あったもんで。
0181デフォルトの名無しさん
NGNGバイナリデータのコンテナとしてはなにが適当なんでしょうか?
vector<char> だとoperator (char*)()がないし。
valarrayってのは使ったことないけどどうなんだろ?
0182デフォルトの名無しさん
NGNGvector<char>::begin() が char* を返してくれるので、これを使えます。
自分はその手の用途のために専用のクラスを作りまひた。。
0183デフォルトの名無しさん
NGNGvector<T>::iterator の型が T* とは限らないから、場合によってはまずいです。
書籍 Effective STL の Item 16 に記述がありますが
std::vector<char> v;
このとき v[0] は「最初の要素への参照」を返し、さらに vector はデータを C の配列と
同様のメモリ配置で持ってることが保証されているから、
&v[0]
が確実とのこと。
0184勉強中
NGNGとすると foo(const char*)を呼び出すときにfoo(str.data())とやるのはやばいってことですか?
0185デフォルトの名無しさん
NGNGfoo の仮引数が '\0' 終端されているバイト列へのポインタを想定しているなら、
まずいですね。
0187浪人
NGNGc_str()で事足りるように思えてしまうんですが・・・
0188デフォルトの名無しさん
NGNG> さらに vector はデータを C の配列と
> 同様のメモリ配置で持ってることが保証されている
これは、仕様としては明確に規定されていないらしいのですが、
実装上はこのことが保証されている、と理解してよろしいですか。
0189デフォルトの名無しさん
NGNGdata() は、内部のポインタを返すだけだけど、c_str() は、
内部データを別のところにコピーしてから '\0' を亜ペン度
する、ってな実装もあるんじゃないかな。
0190デフォルトの名無しさん
NGNGtemplate <class T> class block {
T *mem;
public:
operator T *() { return mem; };
T &operator [](int n) { return mem[n]; };
block(int n) { mem = new T[n]; };
~block() { delete [] mem; };
};
0191デフォルトの名無しさん
NGNGoperator T*()は operator const T*() にしようね。
理由はEffective C++参照
0192デフォルトの名無しさん
NGNGT operator*() とかんちがいしてませんか?
0193デフォルトの名無しさん
NGNGclass A
{
};
class B : public A{
};
class C : public A{
};
などとあり、
list<A> li;
B b;
C c;
li.push_back(b);
li.push_back(c);
という感じで格納します。それで、先頭から参照していきたい
のですが
list<A>::iterator it = li.begin();
このitをBやCにキャストして使いたいのですが、どうすればいいのでしょう?
0194デフォルトの名無しさん
NGNG無理です。
そもそも list<A> li と書いた時点で li は A 型のデータを格納するコンテナとなります。
したがって
li.push_back(b);
この時点で li にはスライシングされた(b から A 型のデータ部分だけ抜き出した)デー
タが作成され、li に格納されてしまいます。B 型固有のデータは失われてしまいます。
多態を使いたい場合には、list<A> ではなく list<A*> を使えば OK です。それから仮想
関数を定義しておけば、キャストするまでもなく多態が実現できますよ。
0195193
NGNGレス、ありがとうございます。やはりムリでしたか。
ポインタにして、いろいろやってみます。
0196デフォルトの名無しさん
NGNGx.resize(5);
とかやったとき、x[0] などの値ってどうなってるんですか?
ゴミ値?
0197デフォルトの名無しさん
NGNG引数なしコンストラクタを起動した状態。
intならゴミじゃないかなあ、正確には知らないけど。
0198デフォルトの名無しさん
NGNG0199デフォルトの名無しさん
NGNGint() は 0 だよん
0200デフォルトの名無しさん
NGNGちょっと STL から話がずれるけど、組み込み型のデフォルトコンストラクタの仕様って、
なぜ、ああなってる(int() が不定ではなく 0 となる)のか分かります?
0201デフォルトの名無しさん
NGNG0202デフォルトの名無しさん
NGNG1.テンプレートにて xx = T(); のような記述はざらにある
2.テンプレートにて T は組み込み型が指定されることもある
3.よって、組み込み型の*明示的なコンストラクタ*は必要
4.その値は、わざわざ不定とするより 0 とした方が合理的(静的変数も0初期化だから)
という議論でそうなっていると思った。
C++3rd,Stroustrup の 6.2.8 にそれらしきことが書いてある。
0203デフォルトの名無しさん
NGNGデフォルトコンストラクタは呼ばれないので注意。一応、為念。
0204デフォルトの名無しさん
NGNG0205デフォルトの名無しさん
NGNGsage たのは STL っつーより C++ 一般の話だからスレ違いかなー、と思ったんで。
おもいっきり STL の話だったね。
> 1.テンプレートにて xx = T(); のような記述はざらにある
> 2.テンプレートにて T は組み込み型が指定されることもある
> 3.よって、組み込み型の*明示的なコンストラクタ*は必要
これで int() を 0 にしなければ、コンストラクタ呼び出し部分のコードとか最適化の
過程で削れそうだよなと思ったんだ。
でも、良く考えたら reserve() と resize() を正しく使い分けてれば、そもそも余計な
デフォルトコンストラクタ呼び出しは発生しないね。
0206デフォルトの名無しさん
NGNG0207デフォルトの名無しさん
NGNGやはりコード爆発の問題などあるんだろうか?
0208デフォルトの名無しさん
NGNGリフレクション機能使ってgenericsを実現してるはずだから、コードの爆発はないと思われ。
C++で例えるなら、 void* 型のコンテナ用意して、dynamic_cast する部分を template 使って実装してるってことね。
ちなみに、C#にもgenericsをつける案はある。
Java Generics
ttp://jcp.org/aboutJava/communityprocess/review/jsr014/
Generics for C# and .NET CLR
ttp://research.microsoft.com/projects/clrgen/
0210202
NGNGそれの呼び出しオーバヘッドなど無いも同然のはず。
それこそ最適化により定数0に置き換わってしまう。
ちなみに、
vector<int> x;
x.resize(5);
よりは、
vector<int> x(5);
と書く方がベター。
0211デフォルトの名無しさん
NGNG今、実験してみたんですけど
vector<int> a(40);
int b[40];
cout << "a = " << sizeof(a) << endl;
cout << "b = " << sizeof(b) << endl;
のようなプログラムの結果が
a = 16
b = 160
だったりするんだけど・・・なぜ??
というかクラスのメンバ変数とかに使っていても問題ないのかなぁ?
なんか変なところのメモリ領域をぶっ壊してなければいいんだけど・・・
ちなみにVC++6.0です。
外出だったらスマソ
0212デフォルトの名無しさん
NGNGあってんじゃん。
std::vectorの仕組みわかってる?
allocatorってなんかしってる?
0213デフォルトの名無しさん
NGNG> だったりするんだけど・・・なぜ??
そりゃ vector は可変長にするために、固定長の配列をメンバとして持ってないから。
VC6 の vector だと、メンバ変数は
_A allocator;
iterator _First, _Last, _End;
これだけ。各 4 バイトで計 16 バイト。
自分で可変長配列を書くことを考えてもらえれば良いんだが、たとえば char の可変長
配列なら
char *buf;
int capacity, size;
ぐらいをメンバ変数に持たせて、buf[xxx] という固定長配列は使わんでしょ?
0214デフォルトの名無しさん
NGNGvectorは常にヒープに保持データを持っているから。
destructorが呼ばれたらdeleteなりなんなりしてヒープを
開放すると。
0215デフォルトの名無しさん
NGNG0216デフォルトの名無しさん
NGNG質問する前に自分で調べるクセがつくのだ… と信じたい今日この頃。
0217名無しさん@Emacs
NGNGそんでも一言.
前者は sizeof(vector<int>) で,後者は sizeof(int[40])って事 > 211
0218211
NGNGたくさんのレスサンキュウ。
たしかに厨房といや厨房なんだけど、調べるにしてもとっかかりがなくて・・・
これで自宅へ帰ってゆっくりと調べられます。ありがとう
0219デフォルトの名無しさん
NGNG> 調べるにしてもとっかかりがなくて・・・
ルーク、ソースを使え。
0220デフォルトの名無しさん
NGNG0221デフォルトの名無しさん
NGNGやっぱりカプセル化の恩恵に預かろうと思い、クラスを作り出す。
そのうちSTLの存在を知り、文字列をbasic_stringにすることを決意。
さらに、独自で作成した双方向リストもSTLに・・・・・・キリがない。
0222デフォルトの名無しさん
NGNG0223デフォルトの名無しさん
NGNG0224デフォルトの名無しさん
NGNGまあねぇ。
STLの中身ってアルゴリズムの勉強用にはうってつけだし。
でも、VC++についてるSTLは中身見れた代物じゃないから
STL Portかなんかの中身見るのが賢明。
0225デフォルトの名無しさん
NGNG場合によると思うけど。
趣味でプログラム書いてるのなら車輪の再発明でも全然悪くない気がする。
0226デフォルトの名無しさん
NGNGSTL を「何も考えずに」使うと、落とし穴にはまって死ぬことになってます。
C++ だし。
0227デフォルトの名無しさん
NGNG0228デフォルトの名無しさん
NGNGいいえ。
特定の処理系の話をしてる、それとも ANSI C++ の「仕様」にバグがあると
言ってる?
0229227
NGNG以下のプログラムが思った動きをしないことを見つけました。
0から32767がソートされて出力されると思うのですが?
32767が32766だと出力されます。
ソート関数の中を見ると確かに間違っているように見えるのですが
もしかしたら仕様なのか?
#include <list>
#include <iostream>
using namespace std;
void main()
{
int i;
list <int> wlist;
for( i = 32767 ; i >= 0 ; --i )
{
wlist.push_back( i );
}
wlist.sort();
for( list<int>::iterator ite = wlist.begin() ; ite != wlist.end() ; ++ite
)
{
cout << (*ite) << "\t";
if( (*ite)%10 == 9 )
cout << endl;
}
}
0230デフォルトの名無しさん
NGNGとりあえず VC6 + STLport 4.5 だと 32767 まで表示されます。VC の STL が
バグってるんじゃないかなぁ。(gcc 2.95.3, Borland C++ Compiler 5.5.1 も問題
なし)
0231227
NGNG一応自分で修正したけど内容がいまいち理解しきれてなかったのでGoogleなどで
検索してみたのですがバグがあるって記述も見つからず、会社のPCなので他の
処理系を入れて比べることができなくて、もしかして仕様? とちょっと不安だっ
たのでとりあえず安心しました。 ありがとうございます。
0232デフォルトの名無しさん
NGNGhttp://www.dinkum.com/vc_fixes.html
直すべし。
つーか、SPに入れてくれよ。>MS
0233デフォルトの名無しさん
NGNG0234デフォルトの名無しさん
NGNGそれに、dinkumのパッチとVC6のSP5は衝突しているヘッダがあって、
どっちを取るか悩ましいっす。
つーか、STLportを使うべきか。
0235デフォルトの名無しさん
NGNGその方が、何かと幸せだと思われ。
0236デフォルトの名無しさん
NGNG0237デフォルトの名無しさん
NGNG0238デフォルトの名無しさん
NGNGしかもその遅さが許容範囲を超えるならdinkum patchを宛ててそっちを使え。
0239デフォルトの名無しさん
NGNGrandom_shuffleが元と同じには絶対ならないのって仕様?
(1 2 3 4 5)てsequenceをrandom_shuffleすると
絶対(1 2 3 4 5)にはならないってことね。
とりあえず2回random_shuffleすることにして回避したけど、そのときは。
0241デフォルトの名無しさん
NGNG技術的な相談は、下から。
下っ端の、技術一本でやってる人つかまえて
たばこでも吸いながらマターリと、
付録のSTLをこき下ろそう。
0242234
NGNG問題はそういうことではなくて、
誰が責任をもつか、ってことなんだな。
0243デフォルトの名無しさん
NGNGうーん、
VC の STL (Known Bug あり) を使うと MS が責任をとってくれるの?
STLport を使わずに自作すれば、上の人が責任をとってくれるの?
と考えると、俺は STLport 使うように説得した方が良いと思うけどな。STLport はフリーだけど
品質はかなり高いよ。
もし金を払ってサポートを買いたいって話なら http://www.stlport.org/services.html に情報が
あるから、そちらもどうぞ。
(これ以上は技術と関係なくなりそうだから、プログラマー板かな)
0244デフォルトの名無しさん
NGNGSTLport好きな人、教えてください。
STLportを使った自分のプロジェクトに、VC++6標準のSTLを使ったライブラリ(*.libと*.hが利用可能)を
組み込もうとしたんだけど、上手くいかないんですよう。リリースビルド時に例外起こして逝きます。
デバッガで追いかけてみたらdelete時にメモリ破壊してました(debugビルド時は平気)。
ライブラリのヘッダの
#include <vector>
でSTLportの方のvectorがincludeされてしまい、おそらくそれが原因では無いかと思っておるのですが。
0245デフォルトの名無しさん
NGNGSTLportが一番下ならSTLportが試用されていない。
STLportが一番上ならSTLportが試用されている。
libと同じ設定でビルドしなさい。
0246デフォルトの名無しさん
NGNGすみません、それってlibと同じようにVCのSTL使えって事デスカ?
STLportのディレクトリ設定は、コンパイラに引数で渡してますので最優先で検索されてます。
0247デフォルトの名無しさん
NGNGSTLport は確かマクロを定義すると、ネームスペース std:: ではなく stlport: に閉じ込められるはず。
そうした上で std::vector() と stlport::vector() を別モノとして区別して使うしかないと思われ。
vector なんかを include するときには、諦めてフルパスで 2 つ書くか、STLport の方にはパスを切
らずに、親ディレクトリにパスを切って
#include <vector>
#include <stlport/vector>
みたいに使うとか。(試したことないけど)
0248デフォルトの名無しさん
NGNGありませんか?日本語だと嬉しいのですが
0249デフォルトの名無しさん
NGNGclass a{
proteted:
char b;
int c;
};
class d{
public:
vector<a> e;
};
int main(){
d* D=new d();
a A;
D->e.push_back(A);
int fh;
fh=_open(....,....,...);
//Dをwriteしたい
_close(fh);
return 0;
}
で、Dの内容を書き込みたいのですが、クラスのベクトルを含んだサイズを取得するにはどうすればよいのでしょう。
0250名無しさん@Emacs
NGNGfor_each(D->e.begin(), D->e.end(), hoge());
って感じで hoge() で書き込む処理を書いとくんじゃだめかい?
# ビミョーに主旨と違う答えな気もするけど
0251デフォルトの名無しさん
NGNG0252デフォルトの名無しさん
NGNGwrite(fh,D,sizeof(D));だったら、ベクトルの中身まで保存されないのです。。。
0253デフォルトの名無しさん
NGNGhttp://www.josuttis.com/cppcode/allocator.html
0254248
NGNGありがとうございます
なかなかシンプルですね(w もうちっと詳しいのどこかに無いかなあ
書籍なんかでもほとんど解説が無いのですがカスタムアロケータって
こういうものでしょうか?
0255デフォルトの名無しさん
NGNGEffective STL の Item 11.
4 page 弱だが、最低限必要なことは書いてあると思われ。
0256デフォルトの名無しさん
NGNG基本的にポインタが含まれるクラスや構造体をバイナリイメージのまま保存しても、ポインタ値が保存されるだけでその参照先は保存されないので、意味がないです。
必要な要素を1個ずつ地道に保存しましょー。
0257デフォルトの名無しさん
NGNGModern C++ Design は?
0258デフォルトの名無しさん
NGNG0259デフォルトの名無しさん
NGNGいざ使おうとなると、
???。
0260名無しさん@Emacs
NGNG0261デフォルトの名無しさん
NGNGstring s1, s2="abc";
s1.assign(s2, 0, s2.size()+1);
if("abc" == s1)
cout << "success" << endl;
else
cout << "failure" << endl;
s1.assign(s2.c_str(), s2.size()+1);
if("abc" == s1)
cout << "success" << endl;
else
cout << "failure" << endl;
を実行した結果が
success
failure
になるんだけど、stringの仕様的にはこれってありなんですかねー?
なんでこうなっちゃうのかはわかるんだけど、
stringの仕様がいまいちわからん。
0262デフォルトの名無しさん
NGNGstd::stringはヌル文字終端ではなく、サイズとデータの組で扱うものなので
(中にヌル文字を含められる)
後者が不一致なのは正しいよ。
0263261
NGNG下が不一致なのは分かるのですが、
上が一致するのは正しいのでしょうか?
というか一致させなければならないのでしょうか?
最近stringクラスを自作していて疑問に思ったもので・・・
0264デフォルトの名無しさん
NGNGstringからassignした場合、size()より大きな長さ指定しても
size()で丸められるからだよ。
0265261
NGNGしかし、ポインタからでもchar_traits::length等で
長さを取得し、丸めることはできると思うのですが・・・
ここら辺は効率、ということなのでしょうか?
0266デフォルトの名無しさん
NGNGポインタからでサイズ指定がある場合は
ヌル文字終端とみなさないでデータブロックとみなすからじゃないかな。
0268デフォルトの名無しさん
NGNGそうでないと「ヌル文字を含むことができる」という仕様なのに
それに適合するデータブロックを設定することができなくなるし。
0270デフォルトの名無しさん
NGNGstringはSTLじゃないよ
0271261
NGNGよく見てますねー(汗
確かにちがいますね。失礼しました。
STLじゃないということで気がついたんですが、
complexクラスの詳しい使い方等知っていらしゃいませんかねー、となたか?
できれば日本語でプリーズ
0272デフォルトの名無しさん
NGNGそれとはもかくcomplexもSTLだっけ?(笑)
でcomplexだが、VCあるならhelpみれば分からん?
0274std::string
NGNG以下のWarningって防ぎようがないんでしょうか?
warning C4251: 'm_strName' : class 'std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' は __export キーワードを使って class 'Test' にエクスポートし
てください。
dllにできないばっかりにMFC(CString)は使いたくないんですが・・・
0275デフォルトの名無しさん
NGNGDLL生成において -MD 指定してる?
0276デフォルトの名無しさん
NGNGみたく、stringが展開される標準のマクロってないんですか?
たとえば、_STRINGにしておけばUnicodeの切り替えが簡単にできるとか
0277std::string
NGNG/MDじゃなくて /MTDになってました。(デバッグ用ライブラリみたいです)。
/MDに変更したら、うまくいきました。
MSVCPRT.LIB マルチスレッド、ダイナミック リンク (MSVCRT.DLL 用インポート ライブラリ) /MD _MT, _DLL
Debug Multithreaded (MTd)
0278デフォルトの名無しさん
NGNGstd::basic_string<_TCHAR>
0279デフォルトの名無しさん
NGNGvector<string>
ってやったんですが、どうしてもWarningが消えないんです。
(warning C4786,VC++6.0)
皆さんはstringの動的配列を使いたいなぁってときはどうしてますか?
-----
#include <windows.h>
#include <vector>
#include <string>
using namespace std;
int main(int argc, char* argv[])
{
vector<string> vsNames;
return 0;
}
0280デフォルトの名無しさん
NGNGその Warning はまともなソース書いててもSTL使ってる限りどうやっても避けれん。
悪いのはプログラマじゃなくてVC++のほう。
#pragma 使って無理やり消すべし。
#pragma warning(disable:4786)
うろ覚えだから書き方間違ってるかも。
MSDNで #pragma の warning について調べてみろ。
0281デフォルトの名無しさん
NGNGVC++でSTL使うときの基本中の基本。つか検索しろよ。
0282デフォルトの名無しさん
NGNG0283280
NGNGすみませんです。ありがとうございますです。
0284デフォルトの名無しさん
NGNGってできるようになってくれるといいと思わない?
(上のコードちょっと間違えてるかもしれない(特にmem_fun_refの引数)けど、
その辺は見逃して…
0285デフォルトの名無しさん
NGNGすでに何をしてるコードだかわかんないyo!
0286デフォルトの名無しさん
NGNGvector の参照 v を渡したときに、
f(v) の実行 => v.resize(num) の実行
となるような関数オブジェクト f を作りたいんじゃないの。たとえばネストした 2 次元の vector があったときに、
内側の vector に対して、まとめて resize とか reserve したい場合に使える。こんな感じか。
vector<vector<int> > vv;
for_each(vv.begin(), vv.end(), bind2nd(mem_fun_ref(&vector<int>::reserve), 1));
for_each(vv.begin(), vv.end(), boost::bind(&vector<int>::resize, _1, 1));
Borland C++ Compiler 5.5.1 と gcc 2.95.3 で試してみたけど、コンパイルが通ったり通らなかったりだなぁ。
VC6 は void 型のメソッドに対して関数オブジェクト作れないので論外だけど。
0287デフォルトの名無しさん
NGNG>VC6 は void 型のメソッドに対して関数オブジェクト作れないので論外だけど。
無駄にbool型にしたりして急をしのいだりした。
あと、VCのせいではないけどmem_fun系で参照の参照がどうたらこうたらというのも鬱陶しい。
0288デフォルトの名無しさん
NGNGstd::complexなんて思いっきり直感そのままなんだから、
複素数を使いたいんだったら何も悩むこと無いと思うんだけど。
つーか、分からないのに使いたい、というシチュエーションがありえるのか...
#次のスレタイトルは標準C++ライブラリに変更したいね。
0289デフォルトの名無しさん
NGNGboost::bind() とか boost::ref() を使うと幸せになれる。
コレクション v に入ってる要素それぞれについて iter->exec(con); を実行したい、ただし con は参照渡し
という場合のサンプルコード。
for_each(v.begin(), v.end(), bind(&Foo::exec, _1, ref(con));
0290STL消防
NGNG配列を詰める方法どうやるん?
vector<int> ary;
ary.push_back(10);
ary.push_back(20);
ary.push_back(30);
ary.erase(1);
こんなんじゃダメでしょ?
0291デフォルトの名無しさん
NGNGvector<T>::erase() の引数は iterator だから、
ary.erase(ary.begin() + 1);
だろう。vector だと begin() で random access iterator を返してくるので、それに +n して n 番目
の要素を指すイテレータが得られる。
0293STL勉強中
NGNGBorland C++ 5.5.1を使用しているのですが、以下のコードがコンパイ
ルエラーになってしまいます。
void foo(const int &i, const char *s)
{
cout << s << i << endl;
}
int main()
{
int d[] = {1, 2, 3, 4 };
vector<int> v(d, d + sizeof(d) / sizeof(int));
for_each(v.begin(), v.end(), bind2nd(ptr_fun(foo), "foo:%d"));
}
エラー E2350 C:\Program Files\Borland\CBuilder5\Include\function.h 327: 参照型へのポインタあるいは参照は定義できない(関数 main() )
エラー E2285 C:\Program Files\Borland\CBuilder5\Include\function.h 338: 'binder2nd<pointer_to_binary_function<const int &,const
char *,void> >::binder2nd(binder2nd<pointer_to_binary_function<const int &,const char *,void> >&)' に一致するものが見つからない
(関数 bind2nd<pointer_to_binary_function<const int &,const char*,void>,char *>(const pointer_to_binary_function<const int &,
const char *,void>&,char * const &) )
『プログラミング言語C++第3版』のP.601に似たようなコードが載っ
ているので、いけそうな気がしたんですが、書き方が悪いのかなあ。
0294名無しさん@Emacs
NGNG何故ダメなのかはちょっと分からないんだけど, foo の引き数を
const int& から int に変えると g++ 2.95.3 ではコンパイル通るよ.
実際,int とかは参照よりも値渡しの方がパフォーマンスいいし,
参照の必要が無いんなら int にしてみては?
# 必要があるんだと・・・どーすりゃいいのかねぇ.
0295デフォルトの名無しさん
NGNGboost::bind(), boost::ref() でいけると思うが。
http://www.boost.org/
0296デフォルトの名無しさん
NGNG0297STL勉強中
NGNG> 何故ダメなのかはちょっと分からないんだけど, foo の引き数を
> const int& から int に変えると g++ 2.95.3 ではコンパイル通るよ.
おお。すばらしい。こちらでも通るようになりました。いろいろ試して
はいたんですが参照とは気がつきませんでした。ありがとうございます。
>>295
教科書にも載っている基本的な部分での問題だったので、気になってい
たのですよ。boostは先ほどダウンロードしましたので、余裕が出来た
ところで英語と格闘してみます。
>>296
いや、それはちょっと(^^;
0298デフォルトの名無しさん
NGNGtransform()を適用したいのですが、可能でしょうか?
0299デフォルトの名無しさん
NGNGつうか、調べればすぐわかることだし、やってみればいいのに。
0300デフォルトの名無しさん
NGNG気のせいですか?
0301デフォルトの名無しさん
NGNG俺は VC6 メインだけど、デバッガ優秀なんで、それほど。
むしろコンパイルエラーが出たときに、エラーメッセージを解読するのが疲れる。
0302名無しさん@Emacs
NGNGtypedef した名前を表示してくれるとカナーリ違うと思うんだけど,それは
望み過ぎだよなぁ,やっぱ.
シンタックスエラーで間違った typedef とかが表示されたら尚更ワケワカンネーヨ
状態になっちまうもんなぁ.
0303302
NGNG0304デフォルトの名無しさん
NGNG疲れる。このブレークポイントはどのテンプレート実体を対象にしたものですか?みたいなダイアログが出てきて少しとまどう。
0305デフォルトの名無しさん
NGNG一度、デバッグするために配列にコピしたこともあるけど、ほとんどは
想像でやってる。
0306デフォルトの名無しさん
NGNGtemplateの最大の欠点だと思う。
でも、しにくいのはコンパイラエラー潰しであって、
ロジックエラーは他と対して変わらないからそんなに気にならない。
コンテナの中身が見難いのはどうしようもないけど。
VC6は便利だけど、templateの実相が甘すぎてtemplate自体が使いにくい。
規格通りのコンパイラがあればいいんだけどねえ。
0307デフォルトの名無しさん
NGNGいや、書き方が悪かった。
transform()の第二引数が、istream_iteratorのケツなんだけど、
それを得る方法がない、の意です。
0308デフォルトの名無しさん
NGNGg++だと最低だね。慣れるまでとてもヨメネー。
0309デフォルトの名無しさん
NGNG引数つきコンストラクタいろいろを犠牲にしていいなら、
typedef std::vector<MyClass> MyVector
↑より↓のが、シンボル短くていいぞ。
class MyVector : public std::vector<MyClass> {};
役に立つ?
0310299
NGNGごめんなちゃ〜い。ちょっと考えて読めばわかりますね。勘違いでちた。
で、回答(試してないけど)ですが、istream_iteratorをデフォルトコンストラクタで作ると、
それがファイル終端になるはずです。記憶違いじゃなければ。
途中で止める方法は、しらない。
0311デフォルトの名無しさん
NGNG.../STLport4.5.1/stlportを指定して最上段に置いたんですが、
コンパイル時に
_site_config.h(51) : fatal error C1189: #error :
"Only multi-threaded runtime library may be linked with STLport!"
cl.exe の実行エラー
なるものが出ます。
STLportの導入って何か他にすべきことがあるんでしょうか・・・。
0312デフォルトの名無しさん
NGNGC/C++ コード生成 使用するランタイムライブラリを
マルチスレッド系にしる!っていわれてんだよ。
0314313
NGNG0315デフォルトの名無しさん
NGNGせめてどうやったかぐらい書くのが礼儀だろ.
0316デフォルトの名無しさん
NGNGそんなんもわからん奴がSTLport使おうとすること自体なんか間違ってると思われ。
いや、STLport使うことで面倒が減るという点において良い効果があることは当然なんだけどね。
0317デフォルトの名無しさん
NGNGシングルスレッドで iostream も要らんのなら
#define _STLP_NO_OWN_IOSTREAMS 1
#define _STLP_NO_THREADS 1
とかもアリ。
0318311
NGNG『マルチスレッド系にしる』とのことでVC++6のヘルプで調べて
プロジェクト→設定→C/C++→カテゴリ→コード生成→マルチスレッド
にしてコンパイルしたところ上記のエラーは消えました。
# VC++6初心者でどこに何があるか判ってなくてすみません。
で今度はリンク時にstl_port_vc6_static.libがないと言われたので、
STLport4.5.1のsrcディレクトリを見るといろいろあったので
NMAKE -f vc6.makとかして出来上がったlibディレクトリを
ツール→オプション→ディレクトリ→ライブラリファイル
に追加しました。これで動きました。
>>317
ありがとございます。
0319デフォルトの名無しさん
NGNGところで Effective STL って訳本出る予定無いんかな?
0320age
NGNG0321長いかも
NGNGアスキーファイルから1行づつデータを取り出して、それをstd::stringに放り込みたいと
思ってます。
で、まず以下のようにしました。
std::ifstream fsHoge("hoge.txt");
while( !fsHoge.eof())
{
string strBuf;
fsHoge >> strBuf;
cout << strBuf.c_str() << std::endl;
}
ですが、これはhoge.txtの中身が
aaa bbb ccc
ddd eee fff 111 222 333
のような場合には意図したようになりません。
char szBuf[1024];
fsHoge.getline(szBuf, 1024);
cout << szBuf << std::endl;
とgetlineを使えば実現できるのですが、1行の長さが1024を超える可能性があるので
不安です。サイズを大きめにとっておけばいいのですが、せっかくstringを使ってるのに
ここでchar[]を使いたくないです。
希望としては、
fsHoge >> strBuf;
としたときに、スペースも文字列として認識する方法とかがあればいいなと思ってます。
何かいい方法ご存じないでしょうか?よろしくお願いします。
0322デフォルトの名無しさん
NGNGstring::getlineはどうよ?
template<class E, class T, class A>
string::basic_istream<E, T>& getline(basic_istream <E, T>& is, basic_string<E, T, A>& str);
0323デフォルトの名無しさん
NGNGwhile (getline(fsHoge, strBuf)) {
cout << strBuf << endl;
}
みたいな。
0324長いかも
NGNGありがとうございました。>>322 >>323
while (getline(fsCurrentMail, strBuf)) {
cout << strBuf.c_str() << endl;
}
これでchar[]の呪縛から逃れられますです。
0325デフォルトの名無しさん
NGNGcout << strBuf.c_str() << endl;
なの?
0326デフォルトの名無しさん
NGNG漏れもそれは気になってた
0327長いかも
NGNG>なぜに
> cout << strBuf.c_str() << endl;
> なの?
あれ?昔stringをそのまま放り込んだらエラーになった経験が・・・
0328長いかも
NGNG> あれ?昔stringをそのまま放り込んだらエラーになった経験が・・・
すみません。
#pragma warning(disable:4786)
を入れる前の話でした。
0329STL勉強中
NGNGboostを試してみました。コンパイラは以前に引き続き、Borland C++ 5.5.1
を使用しています。とりあえず以下のようなコードを書き、1)の部分を
いろいろいじくってテストしてみました。
vector<vector<int> > vv;
vv.resize(4);
1) for_each(vv.begin(), vv.end(), boost::bind(&vector<int>::reserve, _1, 10));
transform(vv.begin(), vv.end(), ostream_iterator<int>(cout, ","),
boost::mem_fn(vector<int>::capacity));
cout << endl;
この状態だと期待通りの動きをしています。次にboostを使わず
2) for_each(vv.begin(), vv.end(), bind2nd(mem_fun_ref(&vector<int>::reserve), 11));
としてみると、コンパイルは通るのですが、reserve()は実行されてい
ないみたいで、結果が
0,0,0,0,
となります。まあ1)で動いているので問題はないのですが。これは
mem_fun_ref()に問題があるのかなと思い、代わりにboost::mem_fn()を
使用してみました。
3) for_each(vv.begin(), vv.end(), bind2nd(boost::mem_fn(&vector<int>::reserve), 12));
するとコンパイルも通らなくなります。std::bind2nd()の方の問題なの
かな?
最後にresize()も試してみました。
4) for_each(vv.begin(), vv.end(), boost::bind(&vector<int>::resize, _1, 10));
> 致命的エラー F1004 mem_fn.cpp 18: コンパイラ内部のエラー(関数 main() )
ぎゃふん。
0330デフォルトの名無しさん
NGNG0331デフォルトの名無しさん
NGNGg++ 3.0.3 だったら以下のコードでキチンと動いたよ
# g++ 2.95.3 はコンパイル通らず
vector<vector<int> > vv;
vv.resize(4);
for_each(vv.begin(), vv.end(), bind2nd(mem_fun_ref(&vector<int>::reserve), 11));
transform(vv.begin(), vv.end(), ostream_iterator<int>(cout, "\n"),
mem_fun_ref(&vector<int>::capacity));
>330
買い
0332デフォルトの名無しさん
NGNGhttp://www.boost.org/status/cs-win32.html によると BCC のクリア率は2位
1: (65) GNU GCC2.95.2-6
2: (63) Borland BCC 5.5.1
2: (63) Metrowerks CodeWarrior 7.0
Pass を1として数えた値。満点は71。ちなみに
Intel Intel C++ 5.0 と Microsoft VC++ 6.0 SP5 STLport 4.0 が 56 でどんじり。
コード生成以外は同じコンパイラかしら。
0333デフォルトの名無しさん
NGNGすぐに買って読むべき。
0334デフォルトの名無しさん
NGNGぶっちゃけた話、STLでは正規表現は使えないのでしょうか?
たとえば、
string strAddress="<[email protected]>";
strAddress.trans("<([a-zA-Z@.]+)>","$1","g");
cout << strAddress << endl;
---
<結果> [email protected]
みたいなことはできないのでしょうか?
0335デフォルトの名無しさん
NGNGSTLほんとに使ってるのか? STLって何か知ってるのか? と突っ込んだ上で、
boost使え。
0336デフォルトの名無しさん
NGNGつーか買え!
0337デフォルトの名無しさん
NGNGなるほど。標準ではやぱりないんですね。残念。
MFCと、
http://www.boost.org/
のライブラリって、ぶっちゃけた話どっちが信用できるんでしょうか?
> STLほんとに使ってるのか? STLって何か知ってるのか? と突っ込んだ上で、
STL: MFCのCStringをつかわなくても、stringが扱える便利な標準ライブラリ。
0338デフォルトの名無しさん
NGNGどっちがって、用途が違うから比較できないだろ。
0339デフォルトの名無しさん
NGNGそんな問いをするキミがいちばん信用できません。
0340STL勉強中
NGNG>>331
> g++ 3.0.3 だったら以下のコードでキチンと動いたよ
> # g++ 2.95.3 はコンパイル通らず
いまやってみたところ、うちにあるg++ 2.96-81でもコンパイル通りませんでした。
そうか、g++ 3.03か…
>>332
> http://www.boost.org/status/cs-win32.html によると BCC のクリア率は2位
なるほど、bccはまだ優秀な方だったんですね。
> Intel Intel C++ 5.0 と Microsoft VC++ 6.0 SP5 STLport 4.0 が 56 でどんじり。
> コード生成以外は同じコンパイラかしら。
う、MS VC++ と STLportを使おうと考えていたんですが…
0341デフォルトの名無しさん
NGNG心情的には
自分の作ったライブラリ > 人のつくったライブラリ
なんだけど、
現実には、
自分の作ったライブラリ < 人のつくったライブラリ
なんだよな。
0342デフォルトの名無しさん
NGNG0343デフォルトの名無しさん
NGNG「他人が使うことを考えて物を作る」
と
「自分で使うために物を作る」
ってのとでは目的が180度異なるからね。この上にさらに品質の問題が
かぶさるから難しいところだ。
0344デフォルトの名無しさん
NGNG俺は広く使われてるライブラリは、それだけ多くの人間の目を通ってるということで
自分のコードよりも信頼してるけど。STLport とか Boost とかさ。
(でも STLport 4.5 では auto_ptr にバグがあって 3 分悩んだが)
0345デフォルトの名無しさん
NGNGけど,やっぱり自分で作るラーメンは,別だよな。連れはいやがるけど。
って感覚。わかってくれると思うけど。
0346STL勉強中
NGNGなんかほっとくとこのスレ下がっちゃうし。
string s("<[email protected]>");
boost::reg_expression<char> e("<([a-zA-Z@.]+)>");
boost::match_results<const char*> r;
if (boost::regex_search(s, r, e))
s.replace(r.position(0), r.length(0), r.str(1));
cout << s << endl;
---
<結果> [email protected]
おお。便利だ。
ところで334さんの意図してたのってこんな感じでいいんでしょかね?
0347デフォルトの名無しさん
NGNGVC6 + STLport 用にコンパイルしたら山のようにファイルが出来て「げげ」
と思ったけど、勝手に必要なライブラリをリンクしてくれるのね。ついでに
#define BOOST_REGEX_STATIC_LINK
しておくと、スタティックリンクも OK と。
ところで >>346 のコード、#define _STLP_DEBUG の状態でコンパイルすると
boost::regex_search() でエラーが出るんだけど、何故?
regtest.cpp(17) : error C2665: 'regex_search' : 4 のオーバーロードは 1 番目の
引数を 'class _STL::basic_string<char,class _STL::char_traits<char>,
class _STL::allocator<char> >' から要求の型に変換できません。
0348STL勉強中
NGNG332さんが上げてくれた
http://www.boost.org/status/cs-win32.html
ここを見ると、VC6 + STLportはboostとあまり相性よくないみたいなん
で、その絡みでしょうかね。
0349初心者
NGNGC++のSTLって、Javaでいうデザインパターンのことでしょうか?
0350デフォルトの名無しさん
NGNG全然違う。
STL は C++ 標準ライブラリの一部
デザインパターンは問題解決に有用な、典型的なクラス構成方法をカタログ化
したもの
0351デフォルトの名無しさん
NGNGSTLport をデバッグモードにしなければコンパイル通るんだよね。とりあえず
> if (boost::regex_search(s, r, e))
< if (boost::regex_search(s.c_str(), r, e))
と変更して、多重定義されてる別のメソッドを呼ぶように変更したら、デバッグモード
でも通りました。
(STLport のデバッグモードは便利なので、これ使えないと困るんだ)
0352デフォルトの名無しさん
NGNG0353デフォルトの名無しさん
NGNGLinux とか Solaris 上でのテスト結果が載ってる。
http://www.boost.org/status/compiler_status.html
0354デフォルトの名無しさん
NGNGVC++6はpartial specializationがないので
基本的にはお手上げ
0355デフォルトの名無しさん
NGNGこれだからメリケンは。
0356デフォルトの名無しさん
NGNGregex に関しては、ワイド文字列使えば OK だが。
0357デフォルトの名無しさん
NGNGiteratorを用いてcontainerにalgorithmを適用するTemplateライブラリ。
標準かどうかはあまり関係ない。(元HPのJD1979にAlexの独自Libraryを
ANSI-C++に取り込まれただけ、現在はSGIが主体だと思ふ。)
対してDesignPatternsは建築屋さんのAlex(別人)の考えをEricなどがCで
ETを実験的に実装して後に書籍にまとめたのが始まり。Javaか否かは関係ない。
余談だが初期のJavaにはCollectionに共通のOperationを行わせる方法が
標準的には無かった。STLを模したライブラリはあったがTemplateではなく
algorithmの適用が難しい。C++が3rd Editionに成った時はC++はすっかり
別物に姿を変えてしまったがGenericsはhomeogeneousでありC++のような
operatorの乱用はありえないのでSTLを改良したTemplate集がJDK1.5には
つく可能性あり。。それまでSunが生きていればね。と書いてあるUnitTest.
0358デフォルトの名無しさん
NGNGその定義だと auto_ptr とか bitset は STL には含まれない?
Effective STL でも STL という単語を
> iteratorを用いてcontainerにalgorithmを適用するTemplateライブラリ。
と定義して使っていたけど、実際には 350 の意味でも使われてるよね。
両方覚えておいて文脈で見極めろ、というのが現実解かと。
0359デフォルトの名無しさん
NGNG「てにをは」が正しくないから読みにくいが、自動翻訳にしてはマシなほうかな。
0360334す
NGNGんだばついでながら参考までにわたくしめの実装を。
bool cutOutUserAndFQDN(string strAdrs, string& r_strUserName, string& r_strFQDN)
{
// メールの正しい形式か
std::string source = strAdrs;
boost::reg_expression<char> regex
= "(^[A-Za-z0-9_][A-Za-z0-9._-]*)@([A-Za-z0-9_][A-Za-z0-9._-]*[A-Za-z0-9]$)";
boost::match_results<std::string::const_iterator> results;
bool found = boost::regex_search(source, results, regex);
if (!found)
{
return false;
}
else
{
strUserName = results.str(1);
strFQDN = results.str(2);
return true;
}
}
もっとまめにくるんだった・・・
0361334す
NGNG0362デフォルトの名無しさん
NGNGgccやVisual C++6.0の実装のハナシだけど、
ifstream(fd)/ofstream(fd)でファイルディスクリプタを渡せますよね。
これでソケットやパイプに対してgetlineやマニピュレーターを適用できる。
(Visual C++だと_get_osfhandle()なんかでハンドル→ディスクリプタ変換)
さあて、ここで、open/read/write/socket/pipeなんてのは
POSIXでもANSIでもありませんよね。
あと、↓の仕様って妥当だと思うけど、これに外れる実装例ってあるのかしら。
ファイルがコンストラクタまたは open メンバ関数を使って開かれているときだけ、
ファイルはクローズされます。
0363デフォルトの名無しさん
NGNG0364デフォルトの名無しさん
NGNG最終的に何を質問してるやらわからん。
0365デフォルトの名無しさん
NGNGgccやVisual C++6.0の実装のハナシだけど、
ifstream(fd)/ofstream(fd)でファイルディスクリプタを渡せますよね。
これでソケットやパイプに対してgetlineやマニピュレーターを適用できる。
(Visual C++だと_get_osfhandle()なんかでハンドル→ディスクリプタ変換)
さあて、ここで、open/read/write/socket/pipeなんてのは
POSIXでもANSIでもありませんよね。
あと、↓の仕様って妥当だと思うけど、これに外れる実装例ってあるのかしら。
ファイルがコンストラクタまたは open メンバ関数を使って開かれているときだけ、
ファイルはクローズされます。
あ、引数にもどしてないや・・・
0366デフォルトの名無しさん
NGNG0367デフォルトの名無しさん
NGNG> ヘンなハナシ
なんじゃないの?
0368デフォルトの名無しさん
NGNGstruct structField {
string Name;
int CD;
};
vector<structField> items;
items.resize(items.size() + 1, structField);
↑
これって、itemsが破棄されてもstringの文字列が破棄されないっていう、
メモリリークはおきないのでしょうか?おきないなら理由も知りたいです。
0369デフォルトの名無しさん
NGNGstring Nameはstack上に置かれるわけで。
# string は typedef 何か* string; されてるわけじゃない。
0370369
NGNGmap<int,string> か map<string,int> か
multimap<int,string> か multimap<string,int> を
使った方がいいとおもうぞ。
0371デフォルトの名無しさん
NGNGもう一つ分からないんですが、
itemsはグローバルになってて、
{
structField structF;
items.resize(items.size() + 1, structF);
}
とかやっちゃうと、スタックだからスコープ抜けると、
itemsのstring Nameの内容は破棄されますか?
0372369
NGNGコンテナに入れる時にコピーされる。
0373デフォルトの名無しさん
NGNGitemsが破棄されるときに、スタックのstring Nameが破棄されるのですね。
>>370 = 369
うわ、multimap調べなきゃ。何事も始めは調べることばかりで大変。
0374デフォルトの名無しさん
NGNGスタックのstring Nameが破棄される、ということは、
コンテナにオブジェクトが入るときは、コピーされたオブジェクトがスタックに入り、
コンテナが破棄されるときに、オブジェクトが破棄される、ということでしょうか?
(あと、stringってオブジェクトになるのかな?)
0375デフォルトの名無しさん
NGNGSTLのソース(ヘッダファイル)を見てみたらどうです?
0376デフォルトの名無しさん
NGNGC++でstackって言葉を使うには注意が必要だ
と言うてみるテスト
0377デフォルトの名無しさん
NGNG0378デフォルトの名無しさん
NGNG0379デフォルトの名無しさん
NGNGどのSTLにするよ?
0380デフォルトの名無しさん
NGNGそんな難問答えられないよ。
コンテナに入れられるときにコピーされるって、
C++のオブジェクトって簡単にコピー出来るわけ?
Java開発で、オブジェクトのコピー用にcloneメソッドの中身実装した。
意味は理解せずに、規約に沿ってだけど(怖
0381デフォルトの名無しさん
NGNG導入後に不具合が出たとかいう話あります?
例のパッチは当ててます。
もう一つ、送付されてくるファイルって
ヘッダ以外に何かありますか?
ライブラリとか差し替えバイナリとか…
0382デフォルトの名無しさん
NGNGあるわけねーだろ
0383デフォルトの名無しさん
NGNGFatal error! Too many recursive call.
0384381
NGNG不具合が?
0385デフォルトの名無しさん
NGNGとりあえずC++をきちんと勉強する事をお勧めする.
Java の clone は Java は皆ポインタだから(この表現良く見るけどホントに
この表現でいいんかな) 必要なわけで.
0386デフォルトの名無しさん
NGNG0387デフォルトの名無しさん
NGNGで、そのあたりのことは、何の本が良いの?
それかサイトとか有りますか?
0388デフォルトの名無しさん
NGNGEffective C++
More Effective C++
Exceptional C++
Web サイトだと GotW (http://www.gotw.ca/) が Exceptional C++ の元ネタに
なってる。
0389385
NGNGまぁそうなんだけどね.でも Java の clone とは意味合いが少し違うじゃん.
どっちも結局は参照の問題ではあるけど.
>387
お約束は388が挙げてくれたけど,オレとしては
C++ FAQ
を結構推したい.最初予備知識無いと意味不明だけど,
何故か読んで行く上で徐々に分かって来る.
0390デフォルトの名無しさん
NGNG詳しく教えてYO!
0391デフォルトの名無しさん
NGNGじゃ C++Gems/MoreC++Gems もあげとこう。
純粋な C++ だけじゃなくて周辺トピクも扱ってる。
C++FAQ も Gems もトピック形式だから気楽によめてまる。
0392385
NGNGJava は
b = a;
ってやっても「コピー」じゃなくって,「同じ値を共有する」わけでしょ.
a も b も同じものを指す.
ところが C++ だと本当に「コピー」なわけ.
a と b は全くの別の実体をそれぞれが持つ.
だから,Java は「コピー」すなわち「別物」を作りたい時に実装するのが
cloneであるわけで,C++ のコピーコンストラクタは「メンバにポインタ持っ
てたりする時にそれがそのままコピーされるのはマズイ」とかを回避するため
に必要なもの.
うーん,オレ日本語下手だな.これで通じるかな・・・
まぁコピーコンストラクタとかについては上記の本を読んで行けば分かるはず.
0393385
NGNG0394デフォルトの名無しさん
NGNGC++だと、
b = a;
で、新しいインスタンスがnewされてbに入るんですか。
言語仕様にインスタンスのcloneが有るわけですね。
0395394
NGNGb = a;
bのインスタンスは既に出来てるからcloneが行われるのか。
0396デフォルトの名無しさん
NGNGどうすればいいでしょうか?
0397デフォルトの名無しさん
NGNGa = complex<T>( a.real(), I ); // aの虚部をIに
…。(w
0398396
NGNG0399デフォルトの名無しさん
NGNGヘッダだけなのかと思ったらなんかライブラリをmakeしないと
ダメなんだね...
今から make ろう
0400デフォルトの名無しさん
NGNGdll かなんかが必要になるとかあるのかな?
仕事に使いたいからそこだけ不安
どうですか
0401デフォルトの名無しさん
NGNG0402デフォルトの名無しさん
NGNGメールした方が早いと思われ
0403STL初心者
NGNG何か?(_A_)
0404デフォルトの名無しさん
NGNGそろそろC厨を煽れますね
おめでとう。
0405デフォルトの名無しさん
NGNG0406デフォルトの名無しさん
NGNGなんでtreeのconst_iteratorなの?
0407デフォルトの名無しさん
NGNGなぜ iterator じゃなくて const_iterator かって話か?
それなら set は「ソート済み」の状態でデータを格納しているわけだが、iterator
経由で要素を書き換えた瞬間に「ソート済み」という前提が崩れる可能性がある
から。
0408デフォルトの名無しさん
NGNGなーる。
よく分かったよ。大変参考になった。
ありがとね。
0409デフォルトの名無しさん
NGNGsgiのallocatorはオブジェクトでないんですが
これってSTLの標準なんですか?それともsgi独自の考え?
0410デフォルトの名無しさん
NGNGgccやVisual C++6.0の実装のハナシだけど、
ifstream(fd)/ofstream(fd)でファイルディスクリプタを渡せますよね。
これでソケットやパイプに対してgetlineやマニピュレーターを適用できる。
(Visual C++だと_get_osfhandle()なんかでハンドル→ディスクリプタ変換)
さあて、ここで、open/read/write/socket/pipeなんてのは
POSIXでもANSIでもありませんよね。
あと、↓の仕様って妥当だと思うけど、これに外れる実装例ってあるのかしら。
ファイルがコンストラクタまたは open メンバ関数を使って開かれているときだけ、
ファイルはクローズされます。
あ、引数にもどしてないや・・・
0411プル
NGNG≡
≡≡≡≡△ ▽
○ \ |,,☆
/|_|\ ≡≡△ ☆,.´☆,\
/\ \:,☆,;:☆ ▽≡ ←STL
0412デフォルトの名無しさん
NGNG410
0413デフォルトの名無しさん
NGNG読まないとは何事だ!!!!!!!読んで意味が理解できないのか、読んでいないのか、読む気がないのかは
知らんが最低限の事は守れ!!!!ここでの管理人はおれだ!!!!!ここでのルール守れない人間はくるな、
邪魔以外の何者でもない、消え去れ
0414デフォルトの名無しさん
NGNG0415デフォルトの名無しさん
NGNGVC++STLのvectorのerase()って要素を削除した後後ろの要素を
前に詰めてくれるんでしょうか?
0416デフォルトの名無しさん
NGNG0417デフォルトの名無しさん
NGNGallocator は STL の標準にふくまれますが、 EffectiveSTL によれば
諸刃の剣(略)だそうです。
>>415
くれます。 MSDN についてくるサンプルコードがよい例です。
>>414
あの本は結構書いてないことが多いですよね。必要なポイントを全部網羅したら
2000ページくらいになるのかな・・・
0418409
NGNGあ、すみません。言葉が足りませんでした。allocatorの存在ではなく
allocatorがオブジェクトでないのが標準なのか?
ということを聞きたかったので。
0419デフォルトの名無しさん
NGNG他になかったり違ったりする点ってある?
0420デフォルトの名無しさん
NGNGそれはともかく、iostreamでソケットを使用する適切な方法について
どう思う?gccなんかだとファイルディスクリプタをコンストラクタに
渡せるが、ファイルディスクリプタは環境依存なんで、そのまま使うの
が気持ち悪いと思うが。
0421デフォルトの名無しさん
NGNGauto_ptr<T>::.reset() もなかった。(ので、さっさと STLport 入れた)
0422デフォルトの名無しさん
NGNG実装コードを見れば明らか。
0423デフォルトの名無しさん
NGNG0424デフォルトの名無しさん
NGNGWindowsでSTLを使う際、MSVCP60.dllというDLLを呼び出してるんですが、
これって結局なんなのでしょう? "C++ランタイムライブラリ"と説明されてますが、
STLport入れてiostreamを入れ替えたりしてもやはり呼び出してます。
WinNT4のSP充てる前に入ってるmsvcrt.dll(Cのランタイム)と、VisualStudio6から
もってきたMSVCP60.dllの組み合わせで、エラーが発生して困ってます。
普通ならmsvcrt.dllをアップデートすれば良い筈なんですが(事実ソレが推奨)、
アップデート入れるなという至上命令のためにひどい難儀してます。
MSVCP60.dllを呼ばないようにするにはどうしたらいいんでしょう?
0425424
NGNGビルドの時にスタティックリンクすれば一応何とかなることは解ったんですが、
ファイルサイズがでかくなるのが困るので……。
0426デフォルトの名無しさん
NGNGDependency Walker を使って MSVCP60.DLL のうち、何を使ってるのか調べて
みれば?
私は Windows 2000 SP2 + VC6 SP5 + STLport 4.5.1 (w/o iostream) を使ってる
けど、そのままだと MSVCP60.DLL にある char_traits や bad_alloc が必要になる
ことが判明したので、
char_traits, bad_alloc だけ実装した必要最小限の C++ Runtime Library
を作って、それをリンクするようにしました(必要ならソースごと上げるけど)。
私の用途だとその二つだけで済んだけど、場合によっては他の関数も必要に
なるかもしれませぬ。
0427デフォルトの名無しさん
NGNGiostreamが追加される前から使ってた&サイズが増える、のでなんとなく
避けていたのですが。
STLPortのiostreamを使わないで300KByte程度のアプリが、iostreamを使うと
600KByteになって、なんか負けた気がします。
0428424
NGNGいや、Dependency Walkerのほうは知っていたのですが、STL丸ごと入れ替えても
なるものなのかな……と。
必要最小限の C++ Runtime Library という発想は思いつきませんでした。
同じところがなってるわけでは無いんですが、後学のためにアップお願い出来ますか?
0429デフォルトの名無しさん
NGNGSTLportの4.5.3をVC6でビルドするとき vc6.makとvc6-unicode.makの二つあるけど
どっちを使っても、なんか、unicode/mbcsどちらのプログラムからも使えるようなんだよね。
特に設定もいじらず、(w)setlocaleだけしてる。
文字コードに依存しそうなとこは
basic_string<wchar_t>
basic_string<char>
basic_stringstream<wchar_t>
basic_stringstream<char>
てなかんじで使ってるけど、これって平気?
0430429
NGNG0431429
NGNGいまのって一個だけしかでないんだよね。
VC依存の話だけど、教えてーん
0432デフォルトの名無しさん
NGNGUNICODEランタイムなんて不要。
なくてもUNICODEのアプリは作れる。
あれはfopenに渡すファイル名がUNICODEかどうかとか
そういう問題で、変換関数はそれに関係なく動く。
別に普通のランタイムでも
wcout << L"あいうえお" << endl;
はちゃんと動作する。
どのみちネットでの通信とかファイルの共有とか
考えると、外部に出力文字コードはiso-2022jpか
シフトJISでないとまずいわけ。
0433デフォルトの名無しさん
NGNGvc6.mak と vc6-unicode.mak に差がないしねぇ。
ところで VC6 + STLport 4.5.3 で試してるんだけど、wstring は動いてるんだが
iostream がまともに動いてない気がする。
--
//#define _STLP_NO_OWN_IOSTREAMS
#include <locale.h>
#include <iostream>
#include <string>
using namespace std;
int
main(void)
{
setlocale(LC_ALL, "japanese");
wstring s(L"文字列");
wprintf(s.c_str()); // OK
wcout << L"日本語" << endl; // NG
wcout << s << endl; // NG
return 0;
}
--
_STLP_NO_OWN_IOSTREAMS を定義して VC6 付属の iostream を使えば
正しく表示される。まぁ、iostream は使わないから、string の類が動けば
構わないんだけど。
0434デフォルトの名無しさん
NGNGsetlocaleのバグ?こっちならちゃんと動く。
setlocale(LC_ALL, "");
0435434
NGNG0436デフォルトの名無しさん
NGNGもしかして src/c_locale_win32/c_locale_win32.c に手を入れないとダメ?
食後にソース読んでみるか。
>>428
char_traits と bad_alloc だけ入れたやつ。
http://www.issei.org/programming/Windows/cpprt/20020223/cpprt.zip
0437デフォルトの名無しさん
NGNG0438デフォルトの名無しさん
NGNGそうか? 先日、数分で書いたコードだが、
http://pc.2ch.net/test/read.cgi/tech/1012536901/n903-908
とかは algorithm がなかったら、遥かに手間がかかってたと思うぞ。
いまさらどうでも良いけど、最後に出力する部分は
> copy(series, series + NELEM(series), ostream_iterator<int>(cout));
の方が良かったかも。
0439429
NGNGほとんどのケースでunicode/mbcsビルドを両方でできるようにしてるんで、
STLportを使う際に「今どっちか」ってのを意識しなきゃいけないようだと大弱りだったんだけど
そんなことないみたいね。
>>432
iostreamは激遅だし必要性もそれほどないので、fileioはstdioを使ってるよ。
結局char_traitsさえしっかりしてればよいということだね。
iso-2022jpとかSJISでないとまずいかどうかはアプリの作り次第なんでとりあえず保留。
内部処理さえunicodeで書ければよいのらー。
>>433
diffをとったらそれほど大差ないように見えたし、ファイルサイズ同じだし、
どちらでビルドしてもよいということなのね。
STLportのwcout/wcinはなんか期待した動きにならないんで使わないようにしてる。
setlocaleの第二引数って、ほんとのところ、何を指定すべきなの?ってのが
いまいちわかってないけど、
_tsetlocale(LC_ALL, _T("Japan"));
でだめ?
0440デフォルトの名無しさん
NGNGコンテナを使うことがほぼ前提だからな・・・
string に対する transform() とか equal() くらいしか
ないかもわからんね。
0441デフォルトの名無しさん
NGNG0442デフォルトの名無しさん
NGNGfind, find_if, binary_search, for_each, accumerate あたりも、割と使う。
0443デフォルトの名無しさん
NGNG> setlocaleの第二引数って、ほんとのところ、何を指定すべきなの?ってのが
VC6 + 付属の CRT なら
> locale "lang[_country[.code_page]]"
> | ".code_page" | "" | NULL
と MSDN Library に書いてある。
言語識別文字列 (lang) は、日本語なら "japanese", 国/地域識別文字列
(country) は "japan"、日本語のコードページは 932 だから
"japanese",
"japanese_japan"
"japanese_japan.932"
".932"
".OCP" (OEM コードページが 932 の環境限定)
どれでも OK でしょう (CRT のソースを読むと、中で EnumSystemLocaleA を
使って列挙したロケール名に対して _stricmp() で比較してるから、"Japanese"
とか "JAPANESE" もアリ)。
このあたりは環境依存で、Solaris だと ja だったり、FreeBSD だと ja_JP.eucJP
だったりとバラバラです。困ったもんだ。
0444429
NGNGありがとんとーーん
"Japan"でいけてたのはVCだからなのね。
改心してJapanese / ja にします
それはさておき、別の問題です。
VC6で、STLport-4.5.3の標準設定のままのときなんだけど、
basic_stringstream<char>を使っていると、
basic_stringstream<char>のコンストラクタがstlのdebugライブラリすでに
あるぞゴルァって怒られます。
よくわからんまま、
stl_user_config.hの_STLP_NO_OWN_IOSTREAMSを1にしてSTLportを
ビルドしようとするとinclude/xxxxなんかねえぞゴルァ!って怒られます。
かといって、プログラムの方で
_STLP_NO_OWN_IOSTREAMSを定義してビルドすると、
basic_stringstreamなんてシランぞゴルァとおこられます。
あちこちのドキュメントにあるように、STLport-4.5.3のiostreamは使わずに
VC付属のiostreamを使うようにするには、どうすれバインダー。
ちなみに今は、STL-4.5.1に戻してます。
なんの問題もないので、このままでいいかとも思ってます。
0445429
NGNG古いインクルードファイルがVCのincludeの下にあったのが原因みたい。
4.5.3評価体制に移行しる。
0446デフォルトの名無しさん
NGNG驚いたんだけど、p43「…入力反復子の範囲内の異なる要素を指す2つの反復子を
使うこともできない。各範囲は同時に単一のアクティブな反復子しかサポート
できない。」とあるのは本当ですか。というか、どういう意味ですか。
これを素直に取ると、first と last という2つの反復子を使えないので、
find なんか実装できないと思うんですが。
0447デフォルトの名無しさん
NGNG「サポートする」というのが曖昧なんだけど、単に等式比較をするのは OK だけど
インクリメントするのは NG と主張してるんだと思う。
first == last
++first;
これは OK だが
++first;
++last;
みたいのは NG だと。
0448デフォルトの名無しさん
NGNGなるほど。「アクティブ」という語を「++ による移動が可能」という意味だと
考えればよいのですね。あと「デリファレンスができる」という意味も含まれる
かな? 通常、first はデリファレンス可能だけど、last は可能とは限らない
ですよね。
で、「独立した複数のアクティブな反復子はサポートされない」という理解で
よいのかな。
0449400
NGNG今までのはなにげに warning(disable:) してたのな、再コンパイルしたら
自分のコードに warning 出まくりで鬱
導入は死ぬほど簡単だった
0451STL勉強中
NGNGまだ勉強中です(^^;;
勉強の一環としてSTLのアルゴリズムっぽい、かなりてきとーな文字コー
ド変換ライブラリを作成してみました。
作成しながら思ったのですが、なんかこういうのってどっかにありそう
だなあと。皆さん、文字コード変換のライブラリってどんなもの使用し
てます?
0452デフォルトの名無しさん
NGNGとかって,なんでこんなヘンチクリンな名前なの?
fやらgやらhやらって一体何よ,コレ?
名前がヘンテコで覚えにくいYO!!
0453デフォルトの名無しさん
NGNGそうか?すげーわかりやすいと思うんだけど。
http://www.boost.org/libs/compose/compose.html
0454デフォルトの名無しさん
NGNGこれがC++屋の美学なのだから受け入れよう。
0455452
NGNGなるほど.サンクス.
0456デフォルトの名無しさん
NGNG0457デフォルトの名無しさん
NGNGか
*iterator->foo
だと思うが
後者の使い方って認められてたっけか…
0458デフォルトの名無しさん
NGNGううー
0459デフォルトの名無しさん
NGNGsee /usr/include/g++-xx
info gcc
0461デフォルトの名無しさん
NGNG> *iterator->foo
*は余計だろ
iterator->fooは認められてた筈だがコンパイラの実装が追いついていない場合が多いので
結果的に (*iterator).foo と書くことが多いな(w
0462デフォルトの名無しさん
NGNGこのクラスを
set<Test*>とするために、operatorを定義したいのですがどう書けばいいのか
わかりません。
set<Test>だったら
bool operator <(const Test &r)const{return i < r.i ;};
としたらOKなのはわかっているのですが。
0463デフォルトの名無しさん
NGNG0464デフォルトの名無しさん
NGNGこんなのはどうよ?
class Test {
int i;
public:
bool operator< (const Test &r) const { return i < r.i; }
};
class Cmp {
public:
bool operator()(const Test* p1, const Test* p2) { return (*p1) < (*p2); }
};
set<Test*, Cmp> ほげほげ;
0465462
NGNG>464
どうもです。
Set<Test*,Cmp>でうまくいきました。
0467デフォルトの名無しさん
NGNG間違ってますか?
class A {
public: void foo(int a) {}
};
int main() {
vector<A> v;
for_each(v.begin(), v.end(),
bind2nd(mem_fun_ref(&A::foo), 1));
}
0468デフォルトの名無しさん
NGNGじゃダメ?
っちゅーか、どんなエラーが出とるんよ?
0469デフォルトの名無しさん
NGNGvector, bind2nd, mem_fun_ref
に std:: 付けろって話なのでは
0470469
NGNG0471デフォルトの名無しさん
NGNGごめん、using namespace std; してます。
g++-3.0.3 だと通ったので、どうやらg++の不具合かな。
g++-2.96 でのエラーメッセージ↓
foo.cpp: In function `int main ()':
foo.cpp:18: assuming & on `A::foo'
/usr/include/g++-3/stl_function.h: In method `typename
_Operation::result_type binder2nd<_Operation>::operator() (typename
_Operation::first_argument_type &) const [with _Operation =
mem_fun1_ref_t<void, A, int>]':
/usr/include/g++-3/stl_algo.h:83: instantiated from `for_each (_InputIter, _InputIter, _Function) [with _InputIter = A *, _Function = binder2nd<mem_fun1_ref_t<void, A, int> >]'
foo.cpp:18: instantiated from here
/usr/include/g++-3/stl_function.h:224: could not convert `(+__x)' to `A
&'
/usr/include/g++-3/stl_function.h:622: in passing argument 1 of
`mem_fun1_ref_t<void, _Tp, _Arg>::operator() (_Tp &, _Arg) const [with
_Tp = A, _Arg = int]'
0472デフォルトの名無しさん
NGNGどんなんでしょうか? 教えてください。
0473デフォルトの名無しさん
NGNGadvance(it, n);
もっとも美しいかどうかわからんけど
0474デフォルトの名無しさん
NGNGおお、思いつかなかった。
どうもありがとう
0475デフォルトの名無しさん
NGNGそれ俺も調べようと思ってた。
さんくすこ
0476デフォルトの名無しさん
NGNGstd::advance ってなんか好かんデザインだよな。
気持ち的には advance( list.begin(), n ) でイテレータを返してほしい。
advance って名前が適当じゃなくなるけど forward とかで。
473 のやり方が気に食わんって話ではない。念のため。
0477デフォルトの名無しさん
NGNGadvance() が引数に取るのは入力反復子だから、
InputIterator i, j;
i = advance(j, n);
というのは無駄だって判断なんだろうね、きっと(この直後に ++i とか ++j と
やると、残りの一方の iterator が無効になるから)。
0478
NGNGclass HogeList : private list<Hoge*>
{
void Add(Hoge *p){push_back(p);}
};
というクラスライブラリを作ったとします。
別のコンパイラで
HogeList l;
l.Add(new Hoge());
とやった場合、動作不良を起こさないんでしょうか?
それともSTLを使ったライブラリはソースを公開するしかないんでしょうか?
0479デフォルトの名無しさん
NGNGテンプレートがコンパイラにどのように解釈されて、
実行オブジェクトに変換されるのかを理解しなさい。
標準ライブラリと、テンプレートライブラリの違いも理解しなさい。
そしてコレがもっとも大切なことだが、
お前の使っているSTLがどのように実装されているのかを調べて理解しなさい。
0480478
NGNGすいません厨なんで、的はずれかもしれませんが、
>テンプレートがコンパイラにどのように解釈されて、
>実行オブジェクトに変換されるのかを理解しなさい。
テンプレートってのは、コンパイル時点で展開されてコンパイルされるんですよね?
>標準ライブラリと、テンプレートライブラリの違いも理解しなさい。
テンプレートライブラリはヘッダファイルに記述されるのが違いでしょうか・・
>お前の使っているSTLがどのように実装されているのかを調べて理解しなさい
STLって、コンパイラごと、バージョンごとに実装が違う可能性ありますよね。
前の質問の補足ですが、STLをDLLに組み込んでも動作不良を起こさないんですか?
0481デフォルトの名無しさん
NGNGDLLにしたからといって動作不良を起こすことはないよ。
DLLもEXEも中身は同じだからね。
ただし、STLの実装はコンパイル時のオプション、パラメータによって、
STL用の外部DLLが必要になる可能性があるのでそれは自分で調べなさい。
ちなみに、STLのコンテナクラスみたいのを、DLLのインタフェースに使用した場合
(つまり、関数やメソッドの引数、戻り値に使用した場合)は、
同じバージョンのSTLを同じ条件でコンパイルしてやらないとうまくいかないかもしれん。
同じく、クラスのメンバとして持っている場合や継承している場合も、
同じバージョンのSTLを同じ条件でコンパイルしないとうまくいかないかもしれん。
#違うバージョンのクラスをメンバとして持っているときにsizeof(クラス)をしたとき、
#どうなるか考えてみよう。
0482デフォルトの名無しさん
NGNGやめとけ、きっとうまく動かない。
理由は>>481にあるとおり、コンパイル時の条件が違えば、それはきっと
うまく動かない。
なんとかして extern "C" なインタフェースにするか、
WindowsならCOMにすることを考えてみなさい。
今までの経験からいくと、thisポインタをハンドル代わりに使用する
extern "C"なインタフェースが一番「素人にもわかりやすい」実装になる。
CのFILE構造体とfopen/fclose/fwriteみたいなやつね。
0483478
NGNGありがとうございます。
STLは内部だけ(privateメンバにもつのはOK)に使って、
インターフェイス(戻り値、引数など)
STLを継承したクラスなどは不可ということですね。
0484デフォルトの名無しさん
NGNGどうせ持つならポインタにしときなさい。
バージョンやオプションやコンパイラによって
sizeof(std::list<A>)が変わる可能性がある。
だがしかし、同一プロジェクトにおいて、
sizeof(std::list<A> *)が変わる可能性は、おそらく無い。
0485デフォルトの名無しさん
NGNGまだまだ成熟してないって事かもしれないけど.
STLport の valarray が何気に遅いような.
他のみなさんのところはどうですか ?
0486デフォルトの名無しさん
NGNG速度を重視するならそこだけ別のvalarrayを使おう!
0487デフォルトの名無しさん
NGNG0488デフォルトの名無しさん
NGNGイテレータ。
0489デフォルトの名無しさん
NGNG0490デフォルトの名無しさん
NGNG覚えるのが楽で、かつ効果大なのは、vector, list, map, set あたりのコンテナと
イテレータのセットかね。次に sort とか size のようなイテレータとセットで働くア
ルゴリズム。
個人的には、あとは auto_ptr も早めに使うことを薦めるけど。
0491デフォルトの名無しさん
NGNGstd::istream_iterator<char> か istreambuf_iterator<char> を
使ってスマートに実現するにはどうしたらいいでしょうか? 教えてください。
0492デフォルトの名無しさん
NGNGgetline() しろよっつー気がするが。アルゴリズムを使いたければ、改行文字か
どうかを調べる述語を作って find_if() とか、どう?
0493デフォルトの名無しさん
NGNG>getline() しろよっつー気がするが。
どうもchar文字列を使いたくないのですよ。
find_if()でできます…?ちょっと思いつかないのですが、コード片を
書いて頂けないっすか…
0494493
NGNGありがとう。
ifs.unsetf(ios::skipws);
string mikuDat((istreambuf_iterator<char>(ifs)),
istreambuf_iterator<char>());
boost::char_delimiters_separator<char> sep(true, "", "\r\n");
boost::tokenizer<> tok(mikuDat, sep);
for(boost::tokenizer<>::iterator beg = tok.begin(); beg != tok.end(); ++beg) {
cout << *beg << "\n";
}
0495デフォルトの名無しさん
NGNG>どうもchar文字列を使いたくないのですよ。
std::getlineとchar文字列の関連がわかりません
0496デフォルトの名無しさん
NGNGi.getline(hoge, 1024); と(それに類するもの)以外のインタフェース
ありましたっけ。行長の制限がないような。
直接 std::string で取れるならそっち使います。おしえて495さん。
0497デフォルトの名無しさん
NGNGナニソレ??
0498デフォルトの名無しさん
NGNGtemplate<typename _CharT, typename _Traits, typename _Alloc>
basic_istream<_CharT,_Traits>&
getline(basic_istream<_CharT, _Traits>& __is,
basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim);
template<typename _CharT, typename _Traits, typename _Alloc>
inline basic_istream<_CharT,_Traits>&
getline(basic_istream<_CharT, _Traits>& __is,
basic_string<_CharT, _Traits, _Alloc>& __str);
0499デフォルトの名無しさん
NGNGストリームのメンバ関数ではなく、テンプレート関数版の getline がある。
0500デフォルトの名無しさん
NGNGそれが498だね
0501デフォルトの名無しさん
NGNG0503デフォルトの名無しさん
NGNGstruct hoge{
CString foo;
int bar;
(略)
};
とかやって、list::sort()したりとか……
0504248
NGNG0505デフォルトの名無しさん
NGNGsortしたいならきちっとコピーコンストラクタか代入演算子と operator < を定義しておけ。
0506デフォルトの名無しさん
NGNG0507デフォルトの名無しさん
NGNG0508デフォルトの名無しさん
NGNG0509デフォルトの名無しさん
NGNG標準STLには無いと思われ。
0510デフォルトの名無しさん
NGNGSGI 版 STL 限定。
0511デフォルトの名無しさん
NGNGSGIに準ずる形でSTLportもOK。
0512デフォルトの名無しさん
NGNG0513デフォルトの名無しさん
NGNGじゃあ何ならいいのだ?boostか?
0514デフォルトの名無しさん
NGNGそれ STL じゃないし。
0515デフォルトの名無しさん
NGNG0516デフォルトの名無しさん
NGNGどこらへんが?
あ、煽りじゃないよ。
0517デフォルトの名無しさん
NGNG一番悪いのはRogueWaveだから。
0518デフォルトの名無しさん
NGNG使い捨てプログラムに対しては楽かもしれないけど、
実際に移植性も考慮して書くとなると、ライブラリのスレッドセーフに頼ることができないので、
自前で排他制御を行ったりすることになるから。
0519デフォルトの名無しさん
NGNGSTLport 自体が移植性高いから。
0520デフォルトの名無しさん
NGNGlist<type>::iterator i;
i = std::find(li.begin(), li.end(), data, pred);
if (i != li.end) {
li.push_front(*i);
li.erase(i);
}
これだとコピーコンストラクタを通さないといけないので。
せっかくリストなんだから、要素をつなぎ変えるだけで実現できるような気がするのですが、
その方法がわかりません
0521デフォルトの名無しさん
NGNG0522デフォルトの名無しさん
NGNGありがとうございます。
>x によって制御されるシーケンスを挿入します。また、x からすべての要素を削除します。この場合、&x は this と等しくないものとします。
しかし、自分の要素を並び替えるのには使えないようです。
0523デフォルトの名無しさん
NGNG> この場合
この場合って list::splice( iterator, list& ); の場合だけでは?
3引数とか4引数のバージョンなら行けるはず。
0524デフォルトの名無しさん
NGNGcopy vc6.mak makefile
nmake clean all
nmake install
しても
ctimeで
../include/ctimeが存在しないとか言われます。落としたファイルが壊れていたんでしょうか。
どこか簡単な解説ページを教えてください。
0526デフォルトの名無しさん
NGNG0527デフォルトの名無しさん
NGNGはいらない。
#define _STLP_NEW_PLATFORM_SDK 1
はたぶんほとんどの環境で必要
0528わかってない人
NGNGlist<string>::iterator p = ls.begin()+1;
なんでこれ、さっきからコンパイル通らねーんだよ。
リストだから +1 されても次のアドレスが
すぐには特定できないってことなんかね。
0529デフォルトの名無しさん
NGNG0530わかってない人
NGNGありがとう。そんなんあったんですね。
イテレータセットした後に、
advance(p, +1);
ってやったら通りました。
ちなみに +1 の場合は p++ と一緒だけど
+2 の場合は p+=2 とは書けないから、そゆとき、
advance を使えってことか。(たぶん)
0531デフォルトの名無しさん
NGNGiteratorを理解していないと思われ(w
0532デフォルトの名無しさん
NGNGリストのイテレータはランダムアクセスイテレータじゃないんで、+n は出来ないんですよ。
++ で1つずつ進めるしかありません。仕様です。
0533デフォルトの名無しさん
NGNG0534デフォルトの名無しさん
NGNGそうだったのか。たしかに、演算子オーバーロードで簡単に実装できそうなのに、
なんで出来ないんだろうと不思議に思ってたよ。
0535デフォルトの名無しさん
NGNGにはならんか
0536デフォルトの名無しさん
NGNG0537デフォルトの名無しさん
NGNGそもそも必要ないのに後置の ++ はヤメレ。
0539デフォルトの名無しさん
NGNG"test1",
"test2",
...
};
BYTE test[] = { 't', 'e', 's', 't', '5' }
std::find_if(strings, strings + numof(strings),
std::not1( boost::bind(memcmp, _1, test, 5) ) );
上のソース、コンパイル通らないんですが、どうすればいいんでしょうか?
std::not1の使い方がおかしいんだとは思いますが・・・
0540539
NGNG何かいい方法無いでしょうか?
0541age
NGNG0542デフォルトの名無しさん
NGNG何がしたいのかよくわからないのが、難点ですね。
0544539
NGNGいろいろ使い回しが聞くのに・・・・
0545デフォルトの名無しさん
NGNG0547539
NGNGnot1(bind2nd(...))が可能なんですが。
どうも文字列として別バッファにコピーするのが綺麗じゃないので。
0548デフォルトの名無しさん
NGNGそれをもういっちょboost:bindでくっつけるんじゃ駄目なん?
0549デフォルトの名無しさん
NGNGそんなことをするなら、専用の比較関数を書く方がいいだろ。
わざわざbind()なんて使ってるんだから、標準だけですませたいんだと推測
0550デフォルトの名無しさん
NGNGstd::find_if( strings, strings + numof(strings),
boost::bind( std::equal< const char*, const char* >, test, test + 5, _1 ) );
コンパイルはできるっぽいけど、どうよ?
0551550
NGNG0552デフォルトの名無しさん
NGNGlha.obj : error LNK2001: 外部シンボル ""bool __cdecl _STL::equal(char const *,char const *,char const *)" (?equal@_STL@@YA_NPBD00@Z)" は未解決です
herb___Win32_Debug_UNICODE/herb.exe : fatal error LNK1120: 外部参照 1 が未解決です。
コンパイルは通るけど、リンクでエラー発生します。
std::equal<const char*, const char*>, test, test + 5, test);
一度↑のようにするなりして、関数の実体をつくらないといけないようで。
VC以外の処理系ならいいのかもしれませんけどね
0553デフォルトの名無しさん
NGNGまぁ、いいや。
0554552
NGNGどうしてもとれなくて悩んだことがあるんだけど、
一度どこかで明示的に実体を作らないといけないと言うことか。
これってVCの制限なのかなぁ
0555デフォルトの名無しさん
NGNGそんなもんかも。
0556550
NGNGうん、それがでてこまってたんだけど、実体作りたいだけなんで、
template bool std::equal( const char* , const char* , const char* );
これでオゥゲェらしい。結果も確認できたよ。
g++ で Internal compiler error 373. になるのが気になってる・・・
0557552
NGNG0558デフォルトの名無しさん
NGNGstd::_Construct と、 std::_Destroy が便利なんですけど、
これって標準のもの?
0559STLワッショイ!
NGNG★STL★
(σ´ー`)σ
0560デフォルトの名無しさん
NGNGんなわけないでしょ。allocatorを使う。
0561558
NGNGじゃぁ自前のアロケーター作るときに(以下同文)
_Destroy(first,last) とかの中見ると、 type_traits<T> 使ってて、
たとえば組み込み型のときは空のインライン関数に特殊化されてるんだけど、
同じ type_traits<T> の仕組みを利用したかったらどうしたらいいんでしょうかね?
自分でループつくって element.~T() とかやってると、
たとえば組み込み型の場合、無駄な空ループが最終コードに残ってしまいます。(g++)
0562デフォルトの名無しさん
NGNG0563名無しさんだよもん
NGNGクラス「Buffer」は、intを格納するコンテナをメンバ変数として持っています。
Buffer buf;
buf.Set([コンテナ]);
とすると、引数で渡されたコンテナ内のデータ(もちろんint)を、
メンバコンテナの最後尾に追加します。追加は最後尾にしか行われません。
「引数で渡すコンテナ」自体のデータ生成も、常に「最後尾にデータ追加」
という形で行われ、 Set() を行うときには、size() がだいたい2〜20
ぐらいになっています。 Set() が終わったら役目を終えて、
スコープアウトして破棄されます。
これをループで50〜200回ぐらい行って、メンバコンテナ内にデータを
溜め込んでいきます。
それで、 set() 呼び出しが一通り終わったら、
cout << buf;
として、メンバコンテナ内部に溜め込んだデータをすべて、入ってきた
順番どおりに出力します。
Buffer内部のコンテナと、引数で渡すときのコンテナは、それぞれ
何を使うべきでしょうか?
なお、取り扱うデータは、ホントにintです。「話を簡単にするために」
とかじゃなくて、実際にintを処理します。
0564デフォルトの名無しさん
NGNG(20KほどReserveしたvectorでも可)
0565デフォルトの名無しさん
NGNG0566デフォルトの名無しさん
NGNGランダムアクセスしないみたいだし、spliceが効きそうだし。
0567デフォルトの名無しさん
NGNGこう、いかがなものかと。
0568デフォルトの名無しさん
NGNG0569デフォルトの名無しさん
NGNG0570デフォルトの名無しさん
NGNG設計自体を変えるか、迷うんだったらとりあえずvector。
それかコンテナもテンプレートにしとけ。
0571デフォルトの名無しさん
NGNGそれだ!要素数は2〜20くらいとか書いてるし、多めに100くらい取っておけば問題なさげ(適当)
0572デフォルトの名無しさん
NGNG関数オブジェクトを渡していろんなコンテナをぐるぐる順次処理したいのですが、
関数オブジェクトの内部に配列とか、その、いろんなものを持たせておいて
最後に ResultT result(std::for_each(v.begin(), v.end(), FuncObj(parameters)).getresult());
みたいなことがやりたいのです。
で、通常for_eachは関数オブジェクトをコピーで受け取り、コピーで返すわけですが、
関数内部のデータのコピーをどう、保持してやるべきかと、悩んでます。
関数オブジェクト自身のコピーのコストがバカにならず、
pimplイディオム+boost::shared_ptrを使おうとおもっとります。
で、本題なんですが、
クラスのメンバにshared_ptrを持っているとき、コピーコンストラクタや代入演算子を
きちんと定義してやらないとまずいでしょうか?
それともデフォルトのコピーコンストラクタに任せちゃってもOKですか?
0573572
NGNGこれが一時オブジェクトだった場合に、最後にgetresult()する瞬間まで
一時オブジェクトが生きてるのかどうか、どっちだったか忘れてしまってます。
コンパイラによっては参照渡しのfor_eachはダメらしいので、
とりあえずコレはなしでおながいします。
0574デフォルトの名無しさん
NGNG0575574
NGNG0576デフォルトの名無しさん
NGNGつうか、俺自身最近コピコンなんて書いてない...。
0577デフォルトの名無しさん
NGNGそうでないと普通に const string& 引数に渡した一時 string が心配。
0578572
NGNGこれで安心してぐるぐるやれます。
ついでに聞いてみますけど、boost(shared_ptr)を使わないでこの問題を解決する
としたら内部データは別に持っておいて、それへのポインタを関数オブジェクトに
持たせてやるしかないのでしょうか?
0579名無しさんだよもん
NGNG配列は渡すときのサイズ指定とかが面倒だし、予定サイズを
もし超えた場合の対処が出来ないので、これはさすがに却下
させていただくとして…。
いままでdequeを使ったこと無かったんですが…こういう状況に合うような
モノだったんですかね。ちょっと勉強します。
listは、>>566>>567さんの書かれてるとおりのネタで悩んでました。
boostに単方向リストとかいうのがあるらしいと聞いたんで、
それならどうだろう…とかも。
結局、コピー追加をしても大してコストがでかくないから、vectorを
使うのが正解ですかね…?
ところで、>>570さんの、「new int...は面倒」と「コンテナも
テンプレートにしとけ」って、どういう意味ですか?
さっぱり分かりません。(T_T)
0580570
NGNGclass Buffer
{ // ...
ってこと。
0581デフォルトの名無しさん
NGNG名前と年齢を持つクラスをソートするとき、名前でソートしたあと、
年齢でソートした場合、同じ年齢の中では名前順がいいよね?
こういう場合、どうするのが一番スマートなんでしょう。自分で
stableなsortを実装するってのじゃ、STLを使う意味が半減するので…。
0582デフォルトの名無しさん
NGNG> うおー!! なんでlistにはstableなsortがないんだー!!
STL以前に基本がなってないと思われ。
#include <list>
#include <iostream>
#include <string>
#include <algorithm>
#include <functional>
using namespace std;
struct Person {
string name_;
int age_;
Person(string name, int age) : name_(name), age_(age) {}
bool operator<(const Person &other) {
return age_ == other.age_ ? name_ < other.name_ : age_ < other.age_;}
void out() {cout << name_ << ": " << age_ << endl;}
};
int main() {
list<Person> group;
group.push_back(Person("mona3", 3));
group.push_back(Person("mona0", 3));
group.push_back(Person("mona1", 15));
group.push_back(Person("mona2", 3));
for_each(group.begin(), group.end(), mem_fun_ref(&Person::out));
group.sort();
cout << "sorted." << endl;
for_each(group.begin(), group.end(), mem_fun_ref(&Person::out));
}
0583デフォルトの名無しさん
NGNGあれ、list::sort って安定じゃなかったっけ?
あれってマージソートの変形版だし。
0584デフォルトの名無しさん
NGNG#include <vector>
#include <algorithm>
#include <iterator>
#include <string>
#include <iostream>
template<typename T>
struct Dereference : std::unary_function<T &, T *> {
T *operator () (T &t) const { return &t; }
};
template<typename T>
こういうことじゃなくて?
struct ConstReference : std::unary_function<const T *, T> {
T operator () (const T *p) const { return *p; }
};
template<typename T>
struct DereferenceLess : std::binary_function<const T *, const T *, bool> {
bool operator () (const T *p1, const T *p2) const { return *p1 < *p2; }
};
class Person {
std::string name_;
int age_;
public:
Person(std::string name, int age) : name_(name), age_(age) {}
friend bool operator<(const Person &a, const Person &b) {
return a.age_ == b.age_ ? a.name_ < b.name_ : a.age_ < b.age_;
}
friend std::ostream &operator << (std::ostream &os, const Person &p) {
return os << p.name_ << ": " << p.age_ << std::endl;
}
};
int main()
{
std::list<Person> l;
std::vector<Person *> v;
l.push_back(Person("mona3", 3));
l.push_back(Person("mona0", 5));
l.push_back(Person("mona1", 15));
l.push_back(Person("mona2", 2));
v.reserve(l.size());
std::transform(l.begin(), l.end(), std::back_inserter(v), Dereference<Person>());
std::stable_sort(v.begin(), v.end(), DereferenceLess<Person>());
std::transform(v.begin(), v.end(), std::ostream_iterator<Person>(std::cout), ConstReference<Person>());
return 0;
}
0585584
NGNGと書こうとして行がずれた...宇津志。
0586581
NGNG>>582 operator < で複数の条件を調べればよかったのか…先の例では
これでOKっすね。
>>583 手元にSTLの規格書がないのでなんとも言えませんが、listのsortは
マージソートで、stableだと保証されているものなのでしょうか?
>>584 listの各要素へのポインタをvectorで保持する? 手元の本に
transformアルゴリズムの詳しい説明がないので、別の本買ってきます…。
本当はreaddir()で取得したファイルの情報をソートしたかったんですよ。
lsを作りたいということで。それで名前でソートしたり日付でソートしたり、
ディレクトリを先頭に集めたり…。
ファイルの情報はクラスに格納してしてlistでつなげていたのですが、
名前でソートしたあとにディレクトリを先頭に集めると、名前順が崩れるんですよ。
名前ソート/ディレクトリソートは単独では正常に動作します。
>>582の解法が良さそうなんですが、operator < の中身が肥大化しそう…。
先に>>584を理解するのが先決かな。
0587よる
NGNGhttp://www.h4.dion.ne.jp/~k.seed/
0588デフォルトの名無しさん
NGNG0589デフォルトの名無しさん
NGNG0590デフォルトの名無しさん
NGNG0591デフォルトの名無しさん
NGNG0592デフォルトの名無しさん
NGNGあれじゃぁstd::stringに変換出来るが、std::wstringに変換出来ないじゃん。
あの宣言じゃ特殊化も出来ないし
0593デフォルトの名無しさん
NGNGTCHAR(char/wchar_t切り替え)ベースでtokenizerを使うにはどうしたらいいもんかね?
locale絡みの問題は、とりあえずおいといて。
0594デフォルトの名無しさん
NGNGおいらの車輪は.....
vcのおまけのchar_traitsが使えるかどうか検討中。
0595デフォルトの名無しさん
NGNG0596デフォルトの名無しさん
NGNG問題あるならchar_traits位自分で書けよ
0597デフォルトの名無しさん
NGNG0598デフォルトの名無しさん
NGNGあきらめてboost::tokenizer互換で行こうかと思ったが
体力ないので保留。
0599デフォルトの名無しさん
NGNG#include <vector>
#include <map>
using namespace std;
int main()
{
map<int, vector<int>> aMap;
// ....
}
みたいな事をするとコンパイルエラーになっちゃうのですが…
0600デフォルトの名無しさん
NGNG0601デフォルトの名無しさん
NGNGマァ・・・
0602デフォルトの名無しさん
NGNGありがち。 >> と書くと operator>>() と勘違いされるから > > と書きましょう。
0603601
NGNGたった3文字に先を越された!!
コンチクショウ!!
0604599
NGNG> >でうまく行きました。ありがとうございました。
ちなみにBCC5.5.1でした。
0605デフォルトの名無しさん
NGNGchar_traitsだけ書き換えてもMBCS対応にはできないと思うが・・
basic_string::rfind()あたりで。
0606デフォルトの名無しさん
NGNGlist
vector
map
以上を使用するときに必要なヘッダーファイル(#include <***>の***部分)を教えて
0607デフォルトの名無しさん
NGNG素直に
auto_ptr #include<auto_ptr>
list #include<list>
vector #include<vector>
map #include<map>
でいいのかな?
0608デフォルトの名無しさん
NGNG全てのヘッダーを読み込めばいいだろうがボケ!
0609デフォルトの名無しさん
NGNGauto_prt -> #include<memory>
0610デフォルトの名無しさん
NGNGでも、結局サロゲートペアとか使われると破綻する?
0611593
NGNGおいら宛の書き込みかな?
ターゲットがwin32だからwchar_tで十分だね。
MBCS/Unicodeどっちでも通るように作っておきたい
ってのが、わがままなんだろうな。
0612デフォルトの名無しさん
NGNGプロトタイプにしか使わないからどーでもよさげ。
0613デフォルトの名無しさん
NGNGclass C
{
int* beg;
int* end;
public:
size_t dis() const{
return std::distance(beg, end) * 2;
}
};
int main(){ return 0; }
bccだとコンパイルできない罠
0614デフォルトの名無しさん
NGNGBorland-C++5.6だと通る罠。
0615デフォルトの名無しさん
NGNGiterator_traits<T>::distance_typeじゃないのか?
0616デフォルトの名無しさん
NGNGあれ、5.6なんてあるのですか?5.51では通りませんですた
>615
そこは突っ込んで欲しくなかったのに。傷つきますた。おかげで傷ものです。
0617デフォルトの名無しさん
NGNGBC++5.6は、BCB6の付属品ですよっ。BCB6のコンパイラエンジンと同じなのね。
Rogue WaveからSTLPortに変わったので、コンパイルできるんじゃないですか。
・・・・と思って、Rogue Waveの実装を使う、_USE_OLD_RW_STLマクロを定義して
コンパイルしても、通ってしまいました。5.5.1のバグなんでしょうか。
0618デフォルトの名無しさん
NGNGバージョン刷新の時に仕様が変わったんでしょ
0619デフォルトの名無しさん
NGNG0620デフォルトの名無しさん
NGNG確認サンクスコ。
フリーの方も次で修正されてると良いんだけど。
0621デフォルトの名無しさん
NGNGバグでも無いのに修正って?
そんな実装依存に頼るんじゃ、わざわざstd::distanceを使う意味がないと思うが
0622デフォルトの名無しさん
NGNGtemplate <class T>
class C
{
T* beg;
T* end;
public:
typename std::iterator_traits<T>::difference_type dis() const {
return std::distance(beg, end) * 2;
}
};
int main()
{
return 0;
}
0623デフォルトの名無しさん
NGNG傷つかんでよろしい。>>615 も間違ってるから。
0624デフォルトの名無しさん
NGNG通らないんじゃない?
mainに C<int> n; って付け足してみ。
0625デフォルトの名無しさん
NGNG本当だ。通らない。なぜだーーーーー
0626デフォルトの名無しさん
NGNGvector や list などのコンテナみたいに allocator の指定ができないので、
独自に valarray ライクなクラスを作らにゃいかんのだろうか。
0627デフォルトの名無しさん
NGNGなぜって、iterator_traits<T*> にしなきゃ。
0628デフォルトの名無しさん
NGNGサンクス!!
ポインタの減算だから、*をつけなきゃいけないんですね。
0629デフォルトの名無しさん
NGNGところが、
C<int> c;
c.dis();
って感じでメンバを呼び出すと、また通らなくなる罠。
0630デフォルトの名無しさん
NGNGreturn std::distance(beg, end) * 2;
}
0631デフォルトの名無しさん
NGNGん?BC++5.6だと通るぞ。また実装依存か。
0632デフォルトの名無しさん
NGNGBCC5.5の機能が少ないんでしょ
0633デフォルトの名無しさん
NGNG今からC++のSTLを覚えるよりは、javaのgenericsを覚えた方が
一般的に得だと思うので。
0634デフォルトの名無しさん
NGNG比較する物が違うぞ
0635デフォルトの名無しさん
NGNGgenericsには反復子ってあるの?
0636613
NGNGinclude/rw/iterator.hの146行目あたりに付け加えると吉。
template <class T> struct iterator_traits<T* const>
{
typedef T value_type;
typedef ptrdiff_t difference_type;
typedef const T* pointer;
typedef const T& reference;
typedef random_access_iterator_tag iterator_category;
};
これで通るようになります。
#include <iterator>
#include <iostream>
template <class ITE> class C
{
ITE beg;
ITE end;
public:
std::iterator_traits<ITE>::difference_type dis() const{
return std::distance(beg, end);
}
C(ITE b, ITE e) : beg(b), end(e){ }
};
int main()
{
int n[] = { 0, 1, 2, 3, 4, 5};
C<int*> c(n, n + 3);
std::cout << c.dis() << std::endl;
return 0;
}
0637デフォルトの名無しさん
NGNGBCC はまったく知らないので、的外れだったらすまんが、
template <class T> struct iterator_traits<T* const>
というのは、あまり見かけたことがない。ふつうは、
template <class T> struct iterator_traits<T*>
と
template <class T> struct iterator_traits<const T*>
だけあれば充分だったと思うが。
0638636
NGNGborland系はいるのかも。STLportの方にもこんなのが。
# if defined (__BORLANDC__)
template <class _Tp>
struct iterator_traits<_Tp* const> {
//...
};
# endif
0639デフォルトの名無しさん
NGNG0640デフォルトの名無しさん
NGNGそうでしたか。的外れスマソ
0641デフォルトの名無しさん
NGNGなるほど。しかし、この修正を必要とするほどBC++5.5.1を使い込んでいるヤシ
はどれくらいいるのだろう?俺はもっぱら勉強用。
0642デフォルトの名無しさん
NGNGこの<の設計がむずくないですか?
ヘタに作るとinsertでとりこぼす。
setに7000個入れたら6950個蹴られた。(笑
頭に来て↓にしたらOKになった。みなさんはどうしてる?
bool operator<( const A& other) const
{
return this < &other;
};
0643デフォルトの名無しさん
NGNGとりあえず、operator < の意味を知れ。
「等値」「等価」あたりがキーワードと思われ。
0644デフォルトの名無しさん
NGNGいや、理屈はわかるよ、
でもね、実際組むとなると難しいところなのよ。
operator<を組まないととりこぼす、
組むとなると複雑なロジックになり
手間はかかるし処理時間もかかる。
例えばベクトルをメンバにもつクラスだとすると
何をもってして等、不等とするのか。
大きさにするのか、向きにするのか、両方を参照して決めるのか等々。
そんなのが何個もメンバとしてもってたりすると大変なのよ。
でもsetの機能は享受したい、でもmultsetでは足りないとか。
0645644
NGNG「とりあえず一意のユニークな値だよ。
だからsetさん蹴らないでね。
でも縦列は問わないよ。
だからソートする際は気にしなくていいよ。」
ってな意味になる訳よ。
0646デフォルトの名無しさん
NGNGしかし、別オブジェクトであっても等値な場合があるなら、
> 例えばベクトルをメンバにもつクラスだとすると
> 何をもってして等、不等とするのか。
この辺は自明だと思うけど。向きに意味を持たせないsetを作りたいなら
大きさだけで比較すればよいし、そうでないならそれなりの比較演算を
すればよいってだけで。
0647デフォルトの名無しさん
NGNG機能の享受も糞も無いと思うんだけど・・
データ設計からやり直しがよいかと。
0648デフォルトの名無しさん
NGNGhash_set, hash_map を使いたいってことじゃないかな?
SGI版や STLport版を使わない理由が、よく判らないけど。
0649デフォルトの名無しさん
NGNGどちらにせよ唯一性をアドレスでしか示せないなら無意味じゃないの?
アドレスわかってんなら検索する必要など無い・・。
唯一性を示すキーと対応付けてるんならこんなことで悩まないでしょ?
0650デフォルトの名無しさん
NGNG>例えばベクトルをメンバにもつクラスだとすると
>何をもってして等、不等とするのか。
lexicographical_compareで一発
でもそんな必要ないならアドレス比較でいいんじゃない?
hash_set にするっつっても、ハッシュ値出すのもしんどそうだけど。
0651デフォルトの名無しさん
NGNGstring s1;
string s2;
};
vector<hoge> hoges;
のとき、hogesをファイルに読み書きするには
どうするのが一番かっこいいんですか?
0652643
NGNG理屈も分かってなさそうに見えるよ。
operator < は評価の順序付けのために定義するもんだ。
順序とは違う「setの機能が享受したい」なんて意味を operator < に
持たせるのは激しく筋違い。
アドレスの比較を使って set に入れたいなら
そういう意味の比較関数オブジェクトを set のテンプレートパラメーターに渡せ。
0653デフォルトの名無しさん
NGNG画面に表示して手書き
0654デフォルトの名無しさん
NGNGこんなのでどう。
template<typename T>
basic_ostream<T>& operator<<(basic_ostream<T>& out, const hoge& h)
{
return out << h.s1 << '\n' << h.s2;
}
ofstream out("ファイル名", ios_base::out);
copy(hoges.begin(), hoges.end(), ostream_iterator<hoge,char>(out, '\n'));
0656デフォルトの名無しさん
NGNGWaRoTa
0657651
NGNG#include <string>
#include <ostream>
#include <istream>
#include <fstream>
#include <iterator>
using namespace std;
struct hoge {
string s1;
string s2;
};
template<typename T>
basic_ostream<T>& operator<<(basic_ostream<T>& out, const hoge& h)
{
return out << h.s1 << '\n' << h.s2;
}
int main()
{
vector<hoge> hoges;
hoge h;
h.s1 = "111";
h.s2 = "aaa";
ofstream out("data", ios_base::out);
copy(hoges.begin(), hoges.end(),
ostream_iterator<hoge,char>(out, '\n')); <−エラー
return 0;
}
error C2665: 'ostream_iterator<struct hoge,char,struct std::char_traits<char> >::ostream_iterator<struct hoge,char,struct std::char_traits<char> >' : 2 のオーバーロードは 2 番目の引数を 'const char' から要
求の型に変換できません。(新しい機能 ; ヘルプを参照)
すいません。コンパオルエラーでたんですが、解決方法がわかんないです。
だってエラーが長いんだもん
0658デフォルトの名無しさん
NGNG0659デフォルトの名無しさん
NGNGそれでファイルからの読み取りを以下のように書いてかんせいしました。ヤタ
template<typename T>
basic_istream<T>& operator>>(basic_istream<T>& in, hoge& h)
{
return in >> h.s1 >> h.s2;
}
ifstream in("data", ios_base::in);
vector<hoge> hoges;
hoge h;
while( in >> h )
hoges.push_back(h);
0660デフォルトの名無しさん
NGNGhoges.assign( istream_iterator<hoge>( ifstream("data") ) , istream_iterator<hoge>() );
0661デフォルトの名無しさん
NGNG同意。
というか 642 がいう「set の機能」って何なんだ?
0662デフォルトの名無しさん
NGNGclass Foo {
public:
int getVal() const { return foo; }
pravate:
int foo;
};
っといういうクラスがあった場合
fooの値でremove_ifを行いたいのですが、その書式がわかりません。
たとえば、fooの値が100以下であれば削除としたいのですが。
list<Foo> l;
remove_if(l.begin(), l.end(), /* ココが? */);
0663デフォルトの名無しさん
NGNGremove_if(l.begin(), l.end(), bind2nd(greater_equal<int>(), 100));
0664デフォルトの名無しさん
NGNGだった。逝ってきます・・・・・
0665デフォルトの名無しさん
NGNGそれではfooの値・getVal()を考慮しないんじゃないでしょうか?
0666デフォルトの名無しさん
NGNGおい、listのときはメンバにあるほうのバージョンを使え。
l.remove_if( pred );
だ。
0667デフォルトの名無しさん
NGNGFoo専用の叙述関数を書く。プログラミング言語C++第3版§18.4.2.1参照。
class Foo {
public:
int getVal() const { return foo; }
private:
int foo;
};
class Foo_le : public unary_function<Foo, bool> {
int i;
public:
explicit Foo_le(const int &ii) : i(ii) {}
bool operator()(const Foo &f) const { return f.getVal() < i; }
};
int main()
{
list<Foo> l;
l.remove_if(Foo_le(100));
}
0668デフォルトの名無しさん
NGNG0669デフォルトの名無しさん
NGNGclass Foo
{
vector< int > hoge;
};
----------------------------
Foo foo;
foo.hoge.push_back( 10 );
foo.hoge.push_back( 20 );
foo.hoge.push_back( 30 );
set< Foo > setFoo;
setFoo.insert( foo);
int numhoge = setFoo.begin()->hoge.size();
とやると何故かnumhogeの値が1になってしまいます。
なぜなんでしょうか?
0670デフォルトの名無しさん
NGNG0671デフォルトの名無しさん
NGNG0672669
NGNGsetFooにfooを複数個入れて
すぐデバックアウトプットしてみると
全部サイズが1で中身も変になってるんです。
0673デフォルトの名無しさん
NGNG0674669
NGNGclass Foo
{
set< DWORD > hoge;
};
>>673
こんな感じです。
bool operator<( const Foo& opp) const
{
set< DWORD >::const_iterator ihoge, iOpphoge;
for(ihoge = hoge.begin(), iOpphoge= opp.hoge.begin();
ihoge != hoge.end() || iOpphoge!= opp.hoge.end();
ihoge++, iOpphoge++)
{
if( ihoge == hoge.end() &&
iOpphoge != opp.hoge.end())return true;
else
if( ihoge != hoge.end() &&
iOpphoge == opp.hoge.end())return false;
if( *ihoge < *iOpphoge)return true;
else
if( *ihoge > *iOpphoge)return false;
}
0675デフォルトの名無しさん
NGNG{
public:
std::set<DWORD> hoge;
bool operator<(const Foo& rhs) const
{
std::set<DWORD>::const_iterator iter1, end1;
std::set<DWORD>::const_iterator iter2, end2;
iter1 = hoge.begin();
iter2 = rhs.hoge.begin();
end1 = hoge.end();
end2 = rhs.hoge.end();
for (;iter1 != end1 || iter2 != end2; iter1++, iter2++) {
DWORD a = *iter1;
if (iter1 == end1 && iter2 != end2)
return true;
else if (iter1 != end1 && iter2 == end2)
return false;
if (*iter1 < *iter2)
return true;
else if (*iter1 > *iter2)
return false;
}
return false;
}
};
Foo foo;
foo.hoge.insert(10);
foo.hoge.insert(20);
foo.hoge.insert(30);
std::set<Foo> setFoo;
setFoo.insert(foo);
setFoo.insert(foo);
setFoo.size() => 1
setFoo.begin()->hoge.size() => 3
(俺には)見づらかったのでなおして試したけど、正常だが?
0676デフォルトの名無しさん
NGNGこれは気にしないでくれ
0677669
NGNGぐあーわかりましたぁぁ。
デバック出力用に
ストリームにhogeの値を出力するような
コードを書いていたんですが、
その中に ; が1個紛れ込んでました。
そのせいでヘンな値が出力されていたようです。
つーか真できます。ありがとうございました。
0678デフォルトの名無しさん
NGNG0679デフォルトの名無しさん
NGNG0680デフォルトの名無しさん
NGNGstring sに文字列が入っているとして
ostringstream os(s);
とすれば、os.str()から返される値がsを反映したものとなる。
同様に、
istringstream is(s);
とすれば、sの内容から入力できる。
C++標準ライブラリ、ASCII、§13.1.1.参照
0681679
NGNGできました。ありがとうございます。
0682デフォルトの名無しさん
NGNGある要素が何番目に位置しているか知るための
関数は用意されてますか?
0683デフォルトの名無しさん
NGNG0684デフォルトの名無しさん
NGNGstd::find
0685デフォルトの名無しさん
NGNG検索が非常に多いことが分かってるなら事前に sort させてしまって、検索には
binary_search を使うと良いかも。
0686デフォルトの名無しさん
NGNGequal_rangeをどうぞ
0687デフォルトの名無しさん
NGNG{
public:
CTestStr(){};virtual ~CTestStr(){};
};
void Test
{
CTestStr<std::wstring> ss;
(std::wstring)ss = _T("aasd");
ss.length();// 0
}
としてるんですが、
ss.length()が0で
ssが不適切なPtrですとデバックウィンドウに出ます。(VC.NET)
UNICODEプロジェクトにしたし、ヘッダーもIncludeしたはずなのですが
なぜなのでしょうか。追記:
CTestStr<std::string> ss; だとうまくPtrは取得できているみたいなんです。
0688687
NGNG○ template <typename T> class CTestStr : public T
0689デフォルトの名無しさん
NGNGそれから、stringを継承するのはよくない。
いくら子クラスでデストラクタをvirtualにしたところで、
親がvirtualで無いから無意味
0690687
NGNG動きました。感謝!!
string,wstring,... 継承したいのはMFCのCStringとSTLの共通クラス&
UNICODE考慮したStringを作りたい(進行|上半分の皮ができたつもり)からなんです。
誰か手伝ってくれる人はいないよね...(w。
0691682
NGNG>>683
distanceで組んでみたんですがうまくいきませんでした。
distanceはfirestからlastまでの差分を返すんだと思いますが
これで検索を行う場合、firestにはコンテナの最初のイテレータ
lastには捜したい値を示す別のコンテナのイテレータになってしまうと
思うんです。これであってますか?
>>684-686
インデックスが知りたいんですが
返されるイテレータを使って知る方法があるんでしょうか?
0692デフォルトの名無しさん
NGNGvector<int> v;
vector<int>::iterator i = find(v.begin(), v.end(), 10);
if(i != v.end()){
int index = distance(i, v.begin());
}
「組み合わせる」という言葉を知らないか?
0693692
NGNG0694682
NGNGありがとうございました。勉強になりました。
ですがそれでは2回走査することになり
効率的ではないですね。
普通に順次検索した方が良さそうですね。
vectorにそれ系のメソッドが無いのも
そういう理由かもしれませんね。
0695694
NGNG0696682
NGNGそうみたいです。
試しに実装してみたら、5倍近速くなりました。
びっくりです。
マジありがとうございました。
0697デフォルトの名無しさん
NGNG0698デフォルトの名無しさん
NGNGbinary_searchの替わりは、lower_boundだと思う。
0699デフォルトの名無しさん
NGNGは何を指しているのでしょうか?
0700デフォルトの名無しさん
NGNG0701699
NGNGstd::string s;
s = "tzest";
char t = 'z';
s.find_last_of(t,npos);
find_last_ofのデフォルトの引数見たら、nposになってたんですけど
nposから検索できないような気がするのですが、なぜなんでしょう。
0702デフォルトの名無しさん
NGNGSTLは神!!
0703デフォルトの名無しさん
NGNGs.find_last_of(t)でいいじゃないの?
オレのとこでは動くけど? VC6SP5
0704デフォルトの名無しさん
NGNGnposをIndexに入れても動くようにたぶん実装されてるみたいですね。
STLを信用してスマートなs.find_last_of(t)でいくことにします。
0705デフォルトの名無しさん
NGNGVCにはないんだけど、これってVCの仕様なの?STLの仕様?
でもなんでないん?
0706デフォルトの名無しさん
NGNGcollate<wchar_t>, ctype<wchar_t>, money_get<wchar_t>, money_put<wchar_t>, num_get<wchar_t>, num_put<wchar_t>, time_get<wchar_t>, time_put<wchar_t>
どれても入り用なものをどうぞ。
0707705
NGNG>UNICODEバージョンなんかあるか
その理由を聞いているんだが。
localeコンストラクタの
locale::locale(const char *s)
これってwchat_t型があってもよさげだけど。
この引数は「ASCI文字しか指定しない」ってだけだからなのか?
0708デフォルトの名無しさん
NGNGあぁ、それか・・・
たぶんそんなことじゃないかね。
basic_fstream のコンストラクタ引数だって、テンプレートの charT じゃなくて const char* になってるし。
0709デフォルトの名無しさん
NGNGチトちゃんとした例を挙げるのが遅かった。失礼。
>basic_fstream
…あ、ホントだ。こっちは知らなかった。情報サンクスコ。
ここらへんもwchar_tに配慮してくれればコーディング
する側としては自由度が広がってありがたいのだが…。
なんとも歯切れの悪い納得になってしまった。
改良(or 納得のいく理由)を求む!>>ANSI or STL開発者
0710デフォルトの名無しさん
NGNG予想→「あ、忘れてました、すんません」
・・・んなわけないか。
でも fopen に対して wfopen てあったっけ?
きっと、ファイルシステムがワイド文字を格納できない可能性を考えて、保証できそうな最低ラインを選んだとかじゃなかろーか。
0711705
NGNGレスサンクスです。
>予想→「あ、忘れてました、すんません」
俺もそうであることを願いたい。
確か叙述関数を指定するcopy_ifも抜け落ちた
と言う話もあるし…。
でもlocaleもbasic_fstreamも構造を見ると
単なる間違いと言うよりは明示的にそのように
したとしか思えないような作りになってるし。
まぁ、俺らの様な厨どもには理解できない理由
があると思わ。
>wfopen てあったっけ?
う…VC以外ではUNICODE使ったことないからANSI
に規定されてるかどうか確認してない…。
スンマソン…。
0712デフォルトの名無しさん
NGNGVC++のヘルプ見る限りでは_wfopenはANSI互換じゃないようだが。
0713デフォルトの名無しさん
NGNG_(アンダーバー)ではじまる物は全部(ほとんど?)
VC++のみの機能。
ただ、open()はANSI規格だけど(だったよね?)
VCではANSI互換にはなってないようなので
_open()になってる。実際はVCでopen()、wfopen()
で使っても特に問題ないんだけど。なんでだろぉ〜…。
なんで_wfopen()しかなくてもANSIで規定されてないか
どうかは不明。
…なんかSTLから少し外れてきたような…スマンコ。
0714デフォルトの名無しさん
NGNGopenはANSIじゃないだろ。
POSIXにはあるが。
0716デフォルトの名無しさん
NGNGUNIX でも open() はたいてい weak symbol になってるよね。
0717デフォルトの名無しさん
NGNG0718デフォルトの名無しさん
NGNG0719デフォルトの名無しさん
NGNG0720デフォルトの名無しさん
NGNG0721デフォルトの名無しさん
NGNG0722デフォルトの名無しさん
NGNGあぁでもエラーにはならんか。
0723デフォルトの名無しさん
NGNGstd::basic_string<unsigned char*> s;
_mbsrev(const_cast<unsigned char*>(s.data()));
とするのはまずいですか?
const unsigned char* ならとれるんですが,unsigned char*を返すメンバ関数が
見あたらないんです。
バッファを別に確保してもできないはこともないですが気になったので聞いてみました。
0724デフォルトの名無しさん
NGNGだめ。
一度別のバッファにコピーして処理した後にbasic_stringに戻す
0725723
NGNG安全を考えてそうすることにします。
ありがとう。
0726デフォルトの名無しさん
NGNGstd::vector<unsigned char>を使わない特別な理由でもあるのか?
std::vector<unsigned char>を使わない特別な理由でもあるのか?
0727デフォルトの名無しさん
NGNGat(0) ではダメですか?非constな参照を返してくれますが。
0728デフォルトの名無しさん
NGNGお前のプログラムを違う環境でコンパイルして動かないとき
よく「コンパイラのバグです」
とか言い訳してるだろ。
0729デフォルトの名無しさん
NGNGいや、案外>>727でいいのかもしれん
>制御シーケンスの位置 pos の要素を指す参照を返す
シーケンス中の参照が変えることが保証されてるっぽい。
って、メモリ上で領域が連続している保証があるのってvectorだけだったっけ?
・・・
0730デフォルトの名無しさん
NGNGOSのバグですとか、STLのバグですとか、ライブラリのバグです
っていいわけ得意だろ。
0731デフォルトの名無しさん
NGNGが得意だろ。
0733デフォルトの名無しさん
NGNG0734デフォルトの名無しさん
NGNGここで const が外れるところが謎な定義になってますが、data() の戻り値は変更してはいけないそーなので、厳密に読むと無理っつぅことで。
data() の戻り値がメモリ上で連続してるのは保証されてるので、そっちは大丈夫ですが。
0735デフォルトの名無しさん
NGNG本日VC7にてSTLPort入れました
が、
<cmath>、<ctime>系のヘッダを#includeしても、
std::sqrtなどが使用できません。
> C2039: 'sqrt' : '_STL' のメンバではありません。
とのことですが、なにぶんSTLPortのヘッダは複雑で一朝一夕には原因が究明できません。
どなたか解決法をご存知の方教えてくだされ。
0736729
NGNG#define _STLP_DO_IMPORT_CSTD_FUNCTIONS 1
を追加
0737デフォルトの名無しさん
NGNG0738デフォルトの名無しさん
NGNGお金貯めてEffective C++買おう
0739デフォルトの名無しさん
NGNG助かりました!
無事コンパイルできました。
ところで、std::min<int>やmax<int>の戻り値がintじゃないのはなぜでしょうか?
警告イパーイヽ(゜∀。)ノアヒャ
あと、coutの出力先を変更するにはどのような方法があるでしょうか。
今までは
freopen( "hoge", "a+"), stdout );
して書き換えていたのですが、
STLPortでは見事に撃沈してしまいました(;; )
0740739
NGNG現状は
#define __STL_NO_SGI_IOSTREAMS 1
して逃げているのですが、
出来ればこの機会に正しい方法を知りたいと思います。
よろしくお願いします。
0741デフォルトの名無しさん
NGNGofstream fout("hoge.txt");
cout=fout;
ウソ言ってたらゴメン。
0742デフォルトの名無しさん
NGNGcout.rdbuf(ofs.rdbuf());
かな?
0743デフォルトの名無しさん
NGNG0744デフォルトの名無しさん
NGNG自前のiteratorを以下のように実装しました。
***ここから1***
class aIterator; // predeclaration
class bIterator; // predeclaration
class aConstIterator; // predeclaration
class bConstIterator; // predeclaration
class aIterator : public iterator_traits<list<a>::iterator> { bIterator b; 〜; };
class bIterator : public iterator_traits<list<b>::iterator> { aIterator a; 〜; };
class aConstIterator : public iterator_traits<list<a>::const_iterator> { bConstIterator b; 〜; };
class bConstIterator : public iterator_traits<list<b>::const_iterator> { aConstIterator a; 〜; };
***ここまで1***
これは問題なくコンパイルできます。
それでiteratorとconst_iteratorの定義でかなりかぶる『〜』の部分を
templateを使って省略しようと思い以下のようにしました。
***ここから2***
template<typename T,typename U>
aIteratorBase : public itetaror_traits<T> { U b; 〜; };
template<typename T,typename U>
bIteratorBase : public itetaror_traits<T> { U a; 〜; };
typedef aIteratorBase<list<a>::iterator,bIterator> aIterator; // (*1)
typedef bIteratorBase<list<b>::iterator,aIterator> bIterator;
typedef aIteratorBase<list<a>::const_iterator,bConstIterator> aConstIterator;
typedef bIteratorBase<list<b>::const_iterator,aConstIterator> bConstIterator;
***ここまで2***
でもこれだと(*1)の部分でbIteratorが未定義なので当然コンパイルできません。
最初の方法だと同じような記述がずらずらと続いて
見た目も美しくなく保守も大変なんですが、何か良いやり方はないでしょうか?
0745デフォルトの名無しさん
NGNGムリッ
定義が無限ループ入ってんじゃんかよ。
大人しくメンバーをポインタに汁!
0746デフォルトの名無しさん
NGNGrdbuf()はbasic_iosからあるのでOKなのでは?
0747デフォルトの名無しさん
NGNGtypedef 使って
const有無は吸収したコード書くべし。
0748739
NGNGrdbufでうまくいきましたです。サンクス!
0749744
NGNGそうなんですけど、最初の方法ならば判読性を抜きにすれば
(5,6行目が相互依存ですが)実装自体可能なことは可能なんです。
メンバをポインタにするというのは・・・抜きの方向で。
>>747
あんまり慣れてなくてよく判らないんですが、
typedefを使ってconst有無を吸収するという場合の
何か取っ掛かりみたいなものはないでしょうか?
0750デフォルトの名無しさん
NGNGHP版STLの実装を見よう。以上。
0751デフォルトの名無しさん
NGNGそもそも 1 のほうもコンパイルできるとは思えんが。
0752744
NGNGHP版というのはHewlett-Packardのことでしょうか。
探してみます。どうもありがとう。
>>751
とりあえずVC++(ver6,STLport)とg++(cygwin版2.95-3)では通ります。
0753744
NGNGが、class list中でclass iteratorとclass const_iteratorを
それぞれについてベタで書いてありました・・・。
これだと1に書いた方法と似たり寄ったりになってしまって、
結局のところ解決にはならないです。
で以下のようにしてみたのですが今のところ問題ないようです。
(>>744の2を少しいじりました)
template<typename T,typename U> class aIteratorBase; // predeclaration
template<typename T,typename U> class bIteratorBase; // predeclaration
template<typename T,typename U>
aIteratorBase : public itetaror_traits<T> { bIteratorBase<T,U> b; 〜; };
template<typename T,typename U>
bIteratorBase : public itetaror_traits<T> { aIteratorBase<T,U> a; 〜; };
typedef aIteratorBase<list<a>::iterator,list<b>::iterator> aIterator;
typedef bIteratorBase<list<a>::iterator,list<b>::iterator> bIterator;
typedef aIteratorBase<list<a>::const_iterator,list<b>::const_iterator> aConstIterator;
typedef bIteratorBase<list<a>::const_iterator,list<b>::const_iterator> bConstIterator;
0754744
NGNG誤:bIteratorBase : public itetaror_traits<T> { aIteratorBase<T,U> a; 〜; };
正:bIteratorBase : public itetaror_traits<U> { aIteratorBase<T,U> a; 〜; };
0755デフォルトの名無しさん
NGNGテンプレートの引数は決まってるし、名前も決まってるんだから
そういう場合はやはり二つとも書かないと駄目。
typedefを使うのはコードの保守を楽にできるということが利点。
(typedefの定義を変えれば、共通してるところはこぴぺで済む)
0756デフォルトの名無しさん
NGNGマルチスレッドアプリではどう回避すればいいのでしょう。
やっぱり STLport でしょうか。
0757デフォルトの名無しさん
NGNGホントにコンパイルは通ったの?マジで?
実際にインスタンスも生成できた?
クラスのサイズが無限大になるはずだが。
0758744
NGNGごめんなさい。>>744の1の5〜8行目の中身は
インスタンス(xIterator x;)ではなくて関数(xIterator func();)です。
# インスタンスだと通りませんが関数ならば通ります。
0759757
NGNGってか>>744の1でコンパイル通った事自体疑問なのだが。
今更だが改めて↓をコンパイルしてみたがもちろん通らん。
なんかコーディングミスで通ってない?
struct clsA;
struct clsB;
struct clsA{clsB b;};
struct clsB{clsA a;};
error:'b'が未定義のstruct 'clsB'で使用されています。
0762デフォルトの名無しさん
NGNGヽ(`Д´)ノ ウワアァン!
struct clsA;
struct clsB;
struct clsA{clsB func(){return clsB();}};
struct clsB{clsA func(){return clsA();}};
error:認識できない型'clsB'が使われています。
0763744
NGNG混乱させてしまって申し訳ないです。でも>>753でうまくいったかと思いきや
class X { 753の記述 };
XXX::aIterator a; // (*1)
のようにクラス内に入れると、VC++では(*1)のところで
aIteratorBase<〜>が未定義と言われてしまいコンパイルが通りません。
g++では通ります(゜ロ゜)。なんだか深みに陥りそうなので、
ひとまずは>>755が仰るようにベタで書いておいて、
簡潔に書く方法はfuture workにでもします。どうもでした。
0764744
NGNG>>762
>>744で端折り過ぎたんですが、実はこうなってました。
マジでごめんなさい。
template<typename T> struct clsA;
template<typename T> struct clsB;
template<typename T> struct clsA{clsB<T> func(){return clsB2();}};
template<typename T> struct clsB{clsA<T> func(){return clsA2();}};
で
clsA {
clsA2 mSubstance;
clsA(const clsA2& a) : mSubstance(a) {}
};
なんだか説明しながら自分でも整理できてきました。
0766盛り上がってるところすまんが
NGNG0767デフォルトの名無しさん
NGNG0768デフォルトの名無しさん
NGNGああもう、どれにレスしていいかわからんが、とにかくだな、
・サイズの計算が必要なところに未定義のクラスを使うことはできない
・逆にいうと、サイズ計算が不要なら、名前の宣言だけで使うことはできる
つまり、
class A;
A foo(A a);
という宣言は OK (後で使わない限り) だが、
class a;
A foo() {
return A();
}
という定義は不可ってこと。よく考えろ。
0769デフォルトの名無しさん
NGNG○ class A;
0770デフォルトの名無しさん
NGNGその単語はどこのお花畑から沸いて出ましたか。
0771疲れた・・・原因分からなかったんだもん
NGNGSTLPortの_Is_integer< wchar_t > がfalseを返してしまって、
basic_string< wchar_t >あたりが見事にこけますね・・・。
namespace std { template <> inline void _Construct< wchar_t >(wchar_t* __p) { *__p = 0;} }
をどっかに書いておいてやると大丈夫です。
外出だったら鬱だ・・・。
0772鈴木宗男
NGNG今後も政治活動をがんばって行こうと思います。
ムネオAGE
0774デフォルトの名無しさん
NGNG0775デフォルトの名無しさん
NGNG>>773の出る幕は無い。余計なお世話でした〜。
0776デフォルトの名無しさん
NGNG3ヵ月も調べてたんだ(w
( ´,_ゝ`)プッ
0777デフォルトの名無しさん
NGNG半日以上かけたんだ(w
( ´,_ゝ`)プッ
0778デフォルトの名無しさん
NGNG3時間近くもかけたんだ(w
( ´,_ゝ`)プッ
0779デフォルトの名無しさん
NGNGじゃあ、俺は 5 分ということで終了 :-P
0780デフォルトの名無しさん
NGNG0781デフォルトの名無しさん
NGNG丸一日以上かけたんだ(w
( ´,_ゝ`)プッ
0782デフォルトの名無しさん
NGNG0783デフォルトの名無しさん
NGNG0784デフォルトの名無しさん
NGNGclass pu
{
public:
pu()
{std::cout
<<"ってか>>"<<N<<"はそのレス書くのに"<<std::endl
<<T<<"も"<<U<<"たんだ(w"<<std::endl
<<"( ´,_ゝ`)プッ"<<std::endl;}
virtual ~pu(){}
};
…普通の関数の方がラクだった…。
0785デフォルトの名無しさん
NGNG1.要素の追加が可能(削除はできなくてもよい)
2.要素のアドレスが変化しない(std::vectorは×)
3.ランダムアクセスが可能
のような性質を持ったものはないでしょうか?
0786デフォルトの名無しさん
NGNGだめっすか?
0788デフォルトの名無しさん
NGNGstd::vector<T> tbl(1000) ; // 多めに確保 resize禁止
っていうか、アドレスで参照しないようにしたほうが賢い。
0789785
NGNG予想されるコンテナのサイズが1〜1000000と広いので、
多めに合わせて毎回1000000個確保するというのは気分的にちょっと・・・。
で、例えば1000個単位のブロックで要素を確保する
配列のラッパーみたいなものがあれば便利だなぁと思って質問しました。
# 作っても大した手間ではないんですが、あるものを利用したいなと。
0790デフォルトの名無しさん
NGNGdequeは?
0791デフォルトの名無しさん
NGNG0792785
NGNG>>790
std::dequeもstd::vectorと同じでコンテナサイズが大きくなると
リアロケーションが起きますよね?
>>791
まさに最初にやろうとしたのがmap<int,T>なんですが、
コンテナと要素の型を用途に応じてテンプレートで切り替えているので、
例えばlist,vector,set,mapでメンバ関数の整合性を取るのが結構大変になってます。
vectorやlistのようなインターフェース(->でメンバにアクセスできたり
ソートの基準が必要なかったり)で>>785に書いたことが出来ればいいなぁと・・・。
ちょっとソースの断片を貼っときます。
>>793
0793785
NGNGclass base {
struct _vec_type{};
struct _lst_type{};
struct _x { std::list<_y*> ylist; typedef X_CONTAINER container_type; };
struct _y { std::list<_x*> xlist; typedef Y_CONTAINER container_type; };
// 要素x,yについて型とコンテナタイプを設定
template<typename T, typename CONTAINER> struct _container_gen {};
template<typename T> struct _container_gen<T,_vec_type> { typedef std::vector<T> type; };
template<typename T> struct _container_gen<T,_lst_type> { typedef std::list<T> type; };
typedef typename _container_gen<_x, X_CONTAINER>::type _xset;
typedef typename _container_gen<_y, Y_CONTAINER>::type _yset;
// 要素の集まり
_xset xset;
_yset yset;
// n番目の要素を返す関数
template<typename T>
T element_forward__dispatch(T begin, int n, _vec_type) {
return begin+n; // vector<>の場合はランダムアクセスで
}
template<typename T>
T element_forward__dispatch(T begin, int n, _lst_type) {
while (n) { ++begin; --n; } // list<>の場合はインクリメントで
return begin;
}
template<typename T>
T element_forward(T begin, int n) {
typename T::container_type container;
return element_forward__dispatch(begin,n,container);
}
};
//使い方
base<_vec_type, _lst_type> a(100,100);
_x x = a.element_forward(xset,10); // 速い
_y y = a.element_forward(yset,10); // 遅い
0794デフォルトの名無しさん
NGNG識別子を _ ではじめちゃだめじゃない?
0795デフォルトの名無しさん
NGNG>std::dequeもstd::vectorと同じでコンテナサイズが大きくなると
>リアロケーションが起きますよね?
ほんとに起きる? とか聞いてみる。
0796デフォルトの名無しさん
NGNG「そういう努力をしようとするな。それは努力の方向性が間違っている」
ってなことをEffectiveSTLに書いてあるんだが、それを知った上での狼藉か?
0797デフォルトの名無しさん
NGNG起きる
0798デフォルトの名無しさん
NGNG末尾(or 先頭)追加だけなら起きないんじゃないの?
http://www.dinkumware.com/htm_cpl/deque.html
>If an element is inserted at begin() or at end(), then all iterators become invalid,
>but no references that designate existing elements become invalid.
iteratorは無効になるけど、参照は無効にならない
0799デフォルトの名無しさん
NGNG提供してはどうか?
まずiteratorから改造が必要だが。
pairがからむあたりの汚さは確かに直交性を乱してると思う。
0800デフォルトの名無しさん
NGNGただしポインタの配列なので参照は変化しないと。
0801デフォルトの名無しさん
NGNGVCについてるやつは、dinkumwareのものだよね。
dinkumware = P.J.Plauger
copyrightもHPとともに書かれてる(HP版を元にしている)。
単にHP版という言葉に反応しただけだが。
0802デフォルトの名無しさん
NGNG>で、例えば1000個単位のブロックで要素を確保する
>配列のラッパーみたいなものがあれば便利だなぁと思って質問しました。
まんまdequeに見えるが…
0803デフォルトの名無しさん
NGNGあっホントだ。
VC=HPという図式が以前からあったもんで、つい。
0804785
NGNGstd::dequeの実装を見た感じ、メモリの管理に関して
std::vectorとあんまり変わらないんですが・・・。
>>796
Effective STLは先週注文したところでまだ読んでません。
コンテナ切り替えは狼藉なんですか・・・。ん〜便利なんですけど。
>>797-798
実は2つのコンテナ(例えば>>793の_xsetと_yset)が相互のイテレータを
持つような構造になってまして、ここではiteratorが無効になることを
まさに避けたいのです。>>785の要望の「アドレスが変化しない」と書いたのは
正確には「イテレータが無効にならない」の誤りでした。すみません。
>>799
なんだか複雑になりそうで・・・。
>>802
リアロケーションさえ起きなければ・・・。
今考えてるのは一定サイズの配列■を
■-■-■-■-■-■-
のようなリスト構造にして、insert()やoperator++()を実装するものです。
欲しいものはとても単純なものなんです。
0805デフォルトの名無しさん
NGNG高速なランダムアクセス。
高速なサイズ拡張。
構造の単純さ。
もっとも近いところにあるのは単なるポインタの配列だ。
(もしくはスマートポインタの配列)
・・と逝ってみるテスト。
0806デフォルトの名無しさん
NGNG> コンテナ切り替えは狼藉なんですか・・・。ん〜便利なんですけど。
便利? コンテナ固有のメソッドを呼んだ瞬間に 入れ替え不可能になるし、
固有のメソッドを呼ばないなら、そのコンテナを選択する意味はほとんどない
が……。
どうでも良いが、とりあえず規格書を読め。先頭に _ がある識別子を使っては
まずい理由やら、どのタイミングで iterator が invalid になるか明記してある。
あれこれ考えるのは、正しい情報を集めてからにしような。
(でないと効率悪いぞ)
0807デフォルトの名無しさん
NGNGスマートポインタをコンテナに入れることはCOAP(Containers of auto_ptr)
と呼ばれ、禁止されている。boostのshared_ptrにすべきである。
0808デフォルトの名無しさん
NGNGshared_ptrもスマートポインタですが
0809デフォルトの名無しさん
NGNGスマソ。STLにスマートポインタを入れるなら、auto_ptrはダメで、shared_ptr
にしませう、という意味です。
0810デフォルトの名無しさん
NGNGコピせずに常に参照を行うスタイルなら問題ない。
0811デフォルトの名無しさん
NGNGアルゴリズムを適用した瞬間に、コンテナの中身がボロボロに壊れる(可能性が
ある)けどな。
0812デフォルトの名無しさん
NGNG「STLに」→「STLコンテナに」
0813デフォルトの名無しさん
NGNG規格ではコンテナにauto_ptrを入れられないようになっているはず。
0814デフォルトの名無しさん
NGNGなってないよ
0815デフォルトの名無しさん
NGNGまあまあEffective STLのP39、第8項でもゆっくりと嫁。
0816デフォルトの名無しさん
NGNG強制はしてない。ただし、そうなってるライブラリも増えてる。
(最近の STLport とか)
0817デフォルトの名無しさん
NGNG0819デフォルトの名無しさん
NGNG{
0820デフォルトの名無しさん
NGNG0821デフォルトの名無しさん
NGNGcatch(kusores& res)
{
thread<<">>"<<res<<"itteyoshi!"<<endl;
}
0822デフォルトの名無しさん
NGNGsc++; // (;´Д`)アァァ
0823デフォルトの名無しさん
NGNGmoney++; // (;´Д`)アァァ
0824デフォルトの名無しさん
NGNG*cubou=money; // (;´Д`)アァァ
0825デフォルトの名無しさん
NGNGSTLを語れ
0826w
NGNGvi[0]++; // (;´Д`)アァァ
0827デフォルトの名無しさん
NGNGどうすればいいでしょう?
stl/_set.hで
typedef const_iterator iterator;
となっています。
const_castするしかない?
0828デフォルトの名無しさん
NGNGsetはソート済みコンテナ。
constはずすのは止めとけ。
0829デフォルトの名無しさん
NGNGなんで? ソート順序に影響が「ない」ような変更を加える場合には const_cast
しても問題ないでしょう。
class Person
{
int id; // こいつがソートキー
string name;
};
これで name を(結婚に伴い)書き換える場合とかさ。
>>827
細かい考察は Effective STL の Item 22 が参考になるかと。
0830デフォルトの名無しさん
NGNGそういう用途にはmapを使えよといいたい
0832デフォルトの名無しさん
NGNGhttp://www.dodgson.org/lab/hat/map_like_set.html
これを知った上で、mapにしろって言ってる?
もし知った上で言ってるんなら、その理由を教えて欲しいな。
0834デフォルトの名無しさん
NGNGなんかリンク先の話もあたりまえのことしか
書いてねーなぁ・・・もう少し意外なことが
あるかと期待してたんだが。
とりあえずリンク先の問題にしていることは、
「オブジェクト自身がキーを持っている場合…」
・冗長になる。
・重複する分領域を損する。
とりあえず解決策として、
・必ずしもクラスでまとめる必要がなければ
map。これでもキーと値はpairで一まとめで扱える。
・必ずクラスでまとめる必要があれば、
set。この場合、値を更新する場合はerase→insert。
ただしvalue_typeをコピーする必要があるため
コピーのオーバーヘッドがかかる。
コピーのオーバーヘッドもいやならconst_castで
いいんでないの?
漏れはしないけど。
0835デフォルトの名無しさん
NGNGmutable を使うってのはどうよ。
0836デフォルトの名無しさん
NGNGmutable って使ってますか
0837デフォルトの名無しさん
NGNGあんまり使わないけど、使う。
使うときはほとんどキャッシュ用だね。
なんかの読み出しアクセサが重いときにキャッシュして高速化したりするときの
キャッシュ保持データに付ける。
0838デフォルトの名無しさん
NGNGキャッシュでも mutable にすると、思わぬバグの原因に
なったりしませんかね?
0839デフォルトの名無しさん
NGNG慎重につかわないといけないのは確かだけど、
同じ目的ならconst_castよりは安全じゃないかな。
0840デフォルトの名無しさん
NGNGstd::less<int>とかがそのまま使えないけど みなさんはどうやってますか??
私はこんなの作ってしのいでますが・・・何かいい物がすでにあるのかな??
template<
class arg1,
class arg2,
class result,
class binary_function
>
class binary_ptr_ref_fun : public std::binary_function<arg1,arg2,result>
//ポインタを外して コンストラクタで渡した関数を実行してくれる関数オブジェクト
{
private:
binary_function func_;
public:
typedef arg1 first_argument_type; //bccのバグ? typedefしなおさないといけない(T_T)
typedef arg2 second_argument_type;
typedef result result_type;
binary_ptr_ref_fun(binary_function func) : func_(func){}
result_type operator()(first_argument_type val1,second_argument_type val2)
{
return (result_type)func_(*val1,*val2);
}
};
template<class arg,class binary_function>
binary_ptr_ref_fun<
arg,
arg,
binary_function::result_type,
binary_function
>
ptr_ref_fun2(binary_function func)
{
//binary_ptr_ref_funを作ってくれる関数
//スマートポインタなどにも使えるようコンテナに入ってる型は
//自分でtemplateパラメータを指定する
binary_ptr_ref_fun<
arg,
arg,
typename binary_function::result_type,
binary_function
> obj(func);
return obj;
}
こんな風に使ってます
std::vector<int*> v;
//vにいろいろ要素を追加
std::sort(v.begin(),v.end(),
ptr_ref_fun<int*>(std::less<int>()));
0841デフォルトの名無しさん
NGNG最後の一行ミスってました(死
汎用的すぎてかえって使いにくい気が。私は
struct DerefLess {
template <typename T>
bool operator()(const T& v1, const T& v2) const {
return *v1 < *v2;
}
};
// DerefLess() の typename 部分は、コンパイラが良きに計らう。
std::sort(v.begin(), v.end(), DerefLess());
ぐらいで妥協してます。ただ binary_function を継承していないから、not なんかと
組み合わせると問題アリですけどね。
0843デフォルトの名無しさん
NGNG0844デフォルトの名無しさん
NGNG私も毎回そんなの書いてたので どうにか出来ないかと思い作ってみました
mem_funなどやnotやptr_funやbindなどと使えるけど確かにごちゃごちゃして
使いにくい部分もあります(死)
0845デフォルトの名無しさん
NGNGこんなんどぅ?
template< typename T , typename P = T* >
struct asterisk : public std::unary_function< P , T& >
{
T& operator () ( const P& p ) const { return *p; }
};
〜〜〜〜〜
std::sort( v.begin() , v.end()
, boost::compose_f_gx_hy( std::less<int>()
, asterisk<const int>()
, asterisk<const int>() ) );
0846デフォルトの名無しさん
NGNGいずれにせよ、
テンプレートメンバ関数にすれば、functor の引数型はコンパイラにお任せ
できるが、変換型関数オブジェクトにならない。
テンプレートクラスにすれば、変換型関数オブジェクトになるが、functor の
引数型は明示的に指定しなくてはならない。(スマートポインタの利用などを
考えると、かなり面倒なことになりそう)
compose 使えば汎用性は高くなるが、長くなって実際に指定するのが面倒。
ってことで、微妙に使いづらい気がする。スパッときれいに書けんものかね。
0847デフォルトの名無しさん
NGNGstd::sort(v.begin(), v.end(), *_1 < *_2);
なんて書けそうなんだけど、ほんとかね?
0848デフォルトの名無しさん
NGNGboost::indirect_iterator
0849デフォルトの名無しさん
NGNG日経ネットのザ・ランキング「日本サッカー史上初のW杯決勝トーナメント進出。功労者は誰?」でトルシエの通訳であるフローラン・ダバディ氏がサポーターの激しい反撃をくらって2位転落です。
今こそ2ちゃんの力を見せてください、おまいら!!
フローラン・ダバディをチェックして投票ボタンを押してくれ。
そしてコピペしる!!
http://rank.nikkei.co.jp/best10/rank.cfm
0850デフォルトの名無しさん
NGNG俺ダバディ好きなんだよ。
投票しなくちゃ。
0851850
NGNG1 フローラン・ダバディ 38830
2 サポーター 33838
3 フィリップ・トルシエ 4609
4 曽ケ端準 2682
5 中田英寿 2617
6 川口能活 1877
7 楢崎正剛 1541
8 稲本潤一 1335
9 宮本恒靖 1282
10 明神智和 1153
11 三都主アレサンドロ 1067
12 中田浩二 889
13 戸田和幸 657
14 柳沢敦 653
15 鈴木隆行 610
16 小野伸二 574
17 JAWOC 503
18 森島寛晃 409
19 秋田豊 320
20 市川大祐 271
21 松田直樹 269
22 中山雅史 225
23 服部年宏 207
24 福西崇史 206
25 小笠原満男 205
26 森岡隆三 204
27 西澤明訓 203
0852デフォルトの名無しさん
NGNG0853デフォルトの名無しさん
NGNGあきらかにふざけているとしか思えない。
つーか、サポータが2位なのも自画自賛しているようでむかつく。
0854デフォルトの名無しさん
NGNG同意
サポーターは別に何もしてないのに
0855デフォルトの名無しさん
NGNG0856デフォルトの名無しさん
NGNGpublic:
bool Show(std::ostream &os) = 0;
};
class hage{
public:
bool Show(std::ostream &os){ os << "hageで悪いか!!\n"; return true; }
};
と言うクラスを
std::vector<hoge*> v;
v.push_back(new hage);
v.push_back(new hage);
v.push_back(new hage);
と言う風にして vの全ての要素に対してstd::coutを引数に渡してShowを呼び出したい。
そんな時にforを書くのはなんだか嫌なのでstd::for_eachでうまく済ませたい。
840のが使えるかと思いbindやらmem_fun_refなどを使ってやったがうまくいかない!
参照の参照になってエラーが出た。
みなやっぱりこういうのはforループまわしてやってるのかな??
0857856
NGNG間違えた スマソ
0858デフォルトの名無しさん
NGNGBoost.org に行って mem_fn と ref をチェック。
0859デフォルトの名無しさん
NGNG#include <vector>
#include <algorithm>
#include <iostream>
#include <boost/lambda/lambda.hpp>
using namespace std;
using namespace boost::lambda;
int main(int argc, char *argv[]) {
vector<int *> v;
v.push_back(new int(6));
v.push_back(new int(1));
v.push_back(new int(5));
sort(v.begin(), v.end(), *_2 < *_1);
for_each(v.begin(), v.end(), cout << *_1 << endl);
return 0;
}
0860デフォルトの名無しさん
NGNGvirtual忘れてるよ
#include <vector>
#include <algorithm>
#include <iostream>
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
using namespace std;
using namespace boost::lambda;
class Base {public: virtual void hoge(ostream &os) = 0;};
class Derived : public Base
{public: virtual void hoge(ostream &os) {os << "hoge" << endl;}};
int main(int argc, char *argv[]) {
vector<Base *> v;
v.push_back(new Derived);
v.push_back(new Derived);
v.push_back(new Derived);
for_each(v.begin(), v.end(), bind(&Base::hoge, _1, var(cout)));
}
0861デフォルトの名無しさん
NGNG#include <algorithm>
#include <functional>
#include <iostream>
using namespace std;
class Base {public:
virtual void hoge(ostream *os) = 0;};
class Derived : public Base {public:
virtual void hoge(ostream *os) {*os << "hoge" << endl;}};
int main(int argc, char *argv[]) {
vector<Base *> v;
v.push_back(new Derived);
v.push_back(new Derived);
v.push_back(new Derived);
for_each(v.begin(), v.end(), bind2nd(mem_fun(&Base::hoge), &cout));
}
0862デフォルトの名無しさん
NGNG#include <algorithm>
#include <iostream>
#include <boost/bind.hpp>
using namespace std;
class Base {public:
virtual void hoge(ostream &os) = 0;};
class Derived : public Base {public:
virtual void hoge(ostream &os) {os << "hoge" << endl;}};
int main(int argc, char *argv[]) {
vector<Base *> v;
v.push_back(new Derived);
v.push_back(new Derived);
v.push_back(new Derived);
for_each(v.begin(), v.end(), boost::bind(&Base::hoge, _1, boost::ref(cout)));
}
0863856
NGNG勉強不足でした
変に考えてた・・・mem_funが普通に使えるんだよね・・・鬱
bcc使ってるけどboost::lambda使った奴がコンパイル出来なかった
これがコンパイル出来るコンパイラってどんなのがある??
0864デフォルトの名無しさん
NGNG#include <vector>
#include <algorithm>
#include <iostream>
#include <boost/bind.hpp>
#include <boost/smart_ptr.hpp>
using namespace std;
using namespace boost;
class Base {public: virtual void hoge(ostream& os) = 0;};
class Derived : public Base {public:
virtual void hoge(ostream& os) {os << "hoge" << endl;}};
int main(int argc, char *argv[]) {
vector<shared_ptr<Base> > v;
v.push_back(new Derived);
v.push_back(new Derived);
v.push_back(new Derived);
for_each(v.begin(), v.end(), bind(&Base::hoge, _1, boost::ref(cout)));
}
>>863
Windows上でlambdaが通るのはgccだけみたい。
http://www.boost.org/status/cs-win32.html
ここに各コンパイラの、機能対応表がある。
0866デフォルトの名無しさん
NGNGstrcpy( &t[0], "ABCD" );
ってコードを見かけたのだけど、これってヤバイよね。
vector<> って、確保された領域の連続性を保証しているのでしょうか?
0867デフォルトの名無しさん
NGNGC言語の配列とメモリレイアウトの互換性があるので、大丈夫。
char t[10];
strcpy( &t[0], "ABCD" );
これと同等。
0868デフォルトの名無しさん
NGNGそのための vector です。
0869デフォルトの名無しさん
NGNGたしか ANSI C++ の最初の規格書には記述が無くて、後から補遺に付け
加えられたんだっけ?
0870デフォルトの名無しさん
NGNGということは、領域の連続性の保証が規格として正式に決まったと理解してよい?
0871デフォルトの名無しさん
NGNGstrcpy( &t[0], "ABCD" );
はOKだけど、
strcpy(t.begin(), "ABCD" );
は実装依存になるからダメ。
iteratorはあくまでiterator。
0872デフォルトの名無しさん
NGNGboostとSTLportは落とした。
問題内。
0873デフォルトの名無しさん
NGNG0874デフォルトの名無しさん
NGNGvector<T>かvector<T*>にするかで迷っています。
というのは要素の削除がvectorの途中[i]で発生したときに[i]と[end()-1]の要素を
スワップした後[end()-1]を削除することで対応しようと思っているのですが、
<T*>を使った場合、スワップはポインタの交換で済むのに対して
要素の追加はinsert(new T)としなければならず、
要素を一つ追加するたびにnewを呼ぶので遅くなりそうな気がします。
#insert(T)であればvectorのallocatorが適当な間隔でまとめて確保してくれる
#と思うのですが…。
何かオーソドックスな流儀とか方針というものがあれば教えてください。
0875デフォルトの名無しさん
NGNGvector<T> なら new を呼ばないけど、T のコンストラクタ・コピーコンストラクタは
呼ばれるから、それほど軽い処理ではないよ。
もう少し要件を詰めた方が良いと思うな。何を重視してるの? もし
コンテナ内の要素の順序は気にしない
単に挿入・削除を早くしたい
だけなら list 使うのも手だし。
0876874
NGNGありがとう。
>コンテナ内の要素の順序は気にしない
>単に挿入・削除を早くしたい
この通りです。で削除には削除要素と最後尾要素のスワップが発生すると。
そしてvectorを使うのはランダムアクセスを速くしたいという理由からです。
vector<T>の要素追加がそれほど軽い処理ではない
(vector<T*>のinsert(new T)に比べて?)とのことですが、
たしかにいま両者を試してみたところ大きな違いはありませんでした。
となればvector<T*>の方が便利そうですね…。
0877デフォルトの名無しさん
NGNG使ったこと無いくせにこういうのもなんだが、STLportを入れて
hash_mapを使うのが最適なんではなかろうか。
0878デフォルトの名無しさん
NGNGこれは危険です。vectorが容量拡張時にメモリ確保に失敗したら T がメモリリークします。
より安全な書き方
T* t = new T;
try{
v.insert(t);
}catch(...){
delete t;
throw;
}
または
auto_ptr<T> t(new T);
v.insert(t.get());
t.release();
0880デフォルトの名無しさん
NGNG0881デフォルトの名無しさん
NGNGやる時にboostが駄目な状況だったらどうやってやる??
0882デフォルトの名無しさん
NGNGboostが駄目な状況でコンテナにスマートポインタ入れたいなら、
自分でパチモン作るだろうねぇ。
0883デフォルトの名無しさん
NGNG0884デフォルトの名無しさん
NGNG0885デフォルトの名無しさん
NGNG当ててみな。
0886デフォルトの名無しさん
NGNG・vectorをコピーするときは、あらかじめresize等をしないとだめ
・コンテナのコンテナは(規格上)作れない
っていうこと書いている人がいるんだけど、本当?
http://dev.sfdata.ne.jp/cbuilder/htdocs/msg24962.html
STLPortの癖(バグ)ってことならまだ理解できるんだけど...。
MLに投稿すればいいってのは分かってるんだけど、
ヘタレなのでここで教えてください。
0887デフォルトの名無しさん
NGNGうそ。まさにコンテナ要件のところにそれ(コピー可能)がある。
>・コンテナのコンテナは(規格上)作れない
うそ。コンテナ要件はコンテナに格納するものの要件
(コピーコンストラクタと代入演算)を満たしている
はず
0888デフォルトの名無しさん
NGNGどこのスレだったか探してる間に先越された・・
0889デフォルトの名無しさん
NGNGVC6 では確かにそのとおり
が、これはコンパイラのバグ
0890デフォルトの名無しさん
NGNGとりあえず VC6 + STLport 4.5.3 だと vector<vector<int> > はコンパイル通った
けど。そういう話じゃなくて?
0891デフォルトの名無しさん
NGNGそれじゃ動的な二次元配列が作れないじゃないかよん。
あ、もちろんnewで、ってのは無しよ。
0892デフォルトの名無しさん
NGNG0893デフォルトの名無しさん
NGNGするから、ものすごく効率が悪いって話なのかな?
0894デフォルトの名無しさん
NGNGえっ?
0895デフォルトの名無しさん
NGNGあんた、たしかにだめぽ (w
vector<vector<T> > オブジェクトは、vector<T> オブジェクトを抱え込んでる
わけではないよ。さらに vector<T> オブジェクトは T オブジェクトを抱えこんでる
わけでもない。
0896デフォルトの名無しさん
NGNGいろんな型 T で sizeof(vector<T>) してみれ。
>>895
その説明じゃわからんだろ。
0897デフォルトの名無しさん
NGNGvector<vector<T> >
ではなく
vector<vector<T>>
とかやってる罠?
と、言ってみる。てすっ
0898名無しさん
NGNG--------
#include <algorithm>
#include <iostream>
#include <map>
#include <vector>
#include <boost/bind.hpp>
class A
{
public:
int func(int i) { std::cout << "func:" << i << std::endl; return i; }
};
class B
{
public:
B(A& a)
{
m_bvec.push_back(a);
m_bmap.insert(std::make_pair(1, a));
}
void func(int i)
{
//std::for_each(m_bmap.begin(), m_bmap.end(), boost::bind(&A::func, _1.second, i));
std::for_each(m_bvec.begin(), m_bvec.end(), boost::bind(&A::func, _1, i));
}
std::map<int, A> m_bmap;
std::vector<A> m_bvec;
};
int main(char argc, char *argv[])
{
A a;
B b(a);
b.func(10);
return 0;
}
--------
こんなかんじなんですが、vectorだとちゃんとできるんですがmapだとどうもうまくいかなかったです。
for_eachを使わないとかパイプ用の関数を作ってやるとかでも対処できるんですが、
なんか素直じゃないようなかんじがするので。
0899デフォルトの名無しさん
NGNGというオチでは無く?
0901デフォルトの名無しさん
NGNG0903デフォルトの名無しさん
NGNG関係ないが、typeidっておもしろいな。
0904デフォルトの名無しさん
NGNG0905デフォルトの名無しさん
NGNG893じゃないけどちょっと質問。
std::vector<T>では『T型の値』が連続した空間に配置されてますよね?
# _M_insertはT*×N個ではなくT×N個でnewしてる(変な表現だけど…)。
たしかにstd::vectorは_M_start, _M_finish, _M_end_of_storageという
3つのポインタを持っているだけなのでsizeof(std::vector<T>)の返り値は
どんなTでも12になるけれど,それは実装形態の問題であって、
>>893の疑問を『抱え込んでるわけでもない』という理由で却下する意図が
よくわかりませんでした。いや…素朴な疑問なんですけど。
0906デフォルトの名無しさん
NGNGいいんじゃない?
だから効率は関係ないよと。
0907デフォルトの名無しさん
NGNGvector< vector< T > >って・・・まぁ T やサイズにもよるけど恐ろしく効率悪いと思われ
上位がリサイズで再割り当てされたら全ての T がコピーされるっしょ。
0908デフォルトの名無しさん
NGNG>>893の言う効率に対してだよ。
でもまあvector<>のリサイズもvector<>ってそういうもんなんだから
しゃーないんちゃうん?
0909デフォルトの名無しさん
NGNG搭載メモリには十分な余裕があります。
mapの要素はノード単位で格納されると思うのですが、
メモリが足りているのにout of memoryが出るというのが解せません。
# 試しに同じコードをVC.NET(+STLPort)で走らせたのですが問題なく走りました。
g++とstd::mapという組み合わせに何かあるのでしょうか?
0910デフォルトの名無しさん
NGNGまずは実行環境を書かないと。なんとなく UNIX 上で limit キツメに設定して
あるので、リソース制限に引っかかってるような気がするけど。
0911909
NGNGどうもです。環境はWin2Kでcygwinを使ってます。g++のバージョンは2.95.3-5です。
メモリは1GB程度積んでますが、500MBくらいのところでout of memoryが出ます。
コマンドプロンプト上でtcshを使って、そこで走らせています。
# でも同じ環境からVC.NETでコンパイルした実行ファイルを走らせても問題ありません。
manでlimitとかdatasizeで検索したんですが
いまいちそれらしいオプションが見つけられずに悩んでいます。
0912デフォルトの名無しさん
NGNG0913909
NGNGとりあえずcygwinのせいということにしておきます。
0914デフォルトの名無しさん
NGNGどんなマシンなんだ・・・
0915デフォルトの名無しさん
NGNG"abc"
"Abc"
"Abcd"
などの文字列を登録可能で、且つ自動で辞書順にソートされている
コンテナはありますか?
0916デフォルトの名無しさん
NGNG0917デフォルトの名無しさん
NGNGstd::setかstd::multiset。場合によっては独自の比較関数。
0918デフォルトの名無しさん
NGNGありがとうございます。
0919デフォルトの名無しさん
NGNG今時、驚くほどでもないと思うけど。
DDR-SDRAMなら512MBが2枚で2万円程度。
ネタにマジレス スマソ。
0920STL始めてさん
NGNGそれともinsert終了時にsort?
でもそれじゃ効率悪い罠
0921920
NGNG0922デフォルトの名無しさん
NGNGinsertion_sort()を自分で定義すればよい。
0923920
NGNGちょっと使ってみるか程度に思っていたので、大変だなぁ。
テンプレとか、その他この他STL文法を理解していないのでとりあえずsortでいいや。
どうも!
0924デフォルトの名無しさん
NGNGinsertion_inserterを作ればいいんじゃないの?
0926デフォルトの名無しさん
NGNG0927920
NGNGそれは挿入ソートのほうがイイ ということでよろしいですか?
結局プログラムにsort自体が必要無いことに気づいて
重複無しpush_backを実装してなんとかなりました
デバッガでイテレータの中身がみれねえのが鬱
0928920
NGNG重複無しだったらsortしたほうがいいわな・・・ハァ
0929デフォルトの名無しさん
NGNGいえ、要素0個から挿入するなら、挿入時にソートすると速いのですよ。
そういうのを挿入ソートといいます。sort()を呼び出す必要がなくなります。
0930デフォルトの名無しさん
NGNG単純なリストでは走査コストが、配列ではコピーコストがかさんでくる。
0931デフォルトの名無しさん
NGNGそうだな。実際に時間を計ってみるとどうなるのかな。sort()はNlogN、挿入
ソートはNのオーダーだから、単純に考えると挿入ソートの方が速そうだ
が、係数がついてくるしな。
0932920
NGNGなるほど。深いですな
まぁ今僕が扱ってるデータ量だとミリ秒以下でそう
どうもです
0933デフォルトの名無しさん
NGNGソート済みのトコロに挿入するなら O(log n) だわな。ランダムアクセスイテレータ
使えれば、だけど。
n 個の要素を順に挿入していく場合、ソート済み配列を作るのに要する時間は
O(log n) で n 回挿入だからで結局 O(n log n)、挿入後にソートするのとオーダー
では変わらんよ。
0934デフォルトの名無しさん
NGNGO(log n)のnは0〜nまで動くかと
0935デフォルトの名無しさん
NGNGlistコンテナだからランダムアクセスイテレータは使えんですよ。
そうなるとpush_back()してソートするのがオーダ的には一番速い
でよろしいか?
0936デフォルトの名無しさん
NGNGそれでも要素数 n に対して O(log n) と書く。O の定義がそうなってるから。
(一番重いところにかかってくるんだよな、O 表記って)
0937デフォルトの名無しさん
NGNG以下に様にしてみました。まだコンパイルしていません。
std::string::size_type idx;
while((idx = buf.find('A')) != std::string::npos){
if(idx == buf.begin() || *(idx - 1) != '\\'){//\はエスケープ
buf.replace(idx, idx, "ABC");
idx += strlen("ABC");
}
else
++idx;
}
ここで次の点がわかりません。
・replaceの引数はこれで大丈夫?
・'A'の前が'\\'であるのを確認するために*(idx-1)として良い?
・idxを進めるのにstrlen("ABC")で進めて良い?
どなたか教えてください
0938デフォルトの名無しさん
NGNGn log n = log (n^n)
納k=1,n]log k = log (n!)
すなわちO(n log n)≠O(納k=1,n]log k)
0939デフォルトの名無しさん
NGNG・ダメ
・ダメ
・いい
0940デフォルトの名無しさん
NGNGありがとうございます
0942デフォルトの名無しさん
NGNGstd::set<string>::iterator idx;
for(idx = myset.begin(); idx != myset.end() ; ++idx){
myvect.insert(&(*idx));
}
ここでmyvectは
std::vector<string>です。
myvect.insert(&(*idx));
ってなんかへんじゃないスか?
setからvectorに内容をコピーするのにもっと優れた方法があるような気がしてます。
教えてください。お願いします
0943デフォルトの名無しさん
NGNG0944デフォルトの名無しさん
NGNG0945デフォルトの名無しさん
NGNGどうもありがとうございます。思い切り初心者なモンですみませんです。。
0946デフォルトの名無しさん
NGNGそんな方法もあるのですね?試してみます。
どうもです。
0947デフォルトの名無しさん
NGNGcopy(myvect.begin(), myvect.end(), inserter(myset, myset.end()); では?
0948デフォルトの名無しさん
NGNG0950デフォルトの名無しさん
NGNG逆だろ? myvect に入れたいって言ってる
>>942
vector<string>よりlist<string>のほうが効率がいいのとちゃうか?
0951デフォルトの名無しさん
NGNGスターリングの公式:n!〜√(2πn)n^n/e^n
つまりn log nより納k=1,n]log kの方が断然オーダーが小さい
0952デフォルトの名無しさん
NGNGどちらかというとo(n log n)だというだけ
0953デフォルトの名無しさん
NGNGlog( n! )
〜 log( √(2πn)n^n/e^n )
〜 log( √2πn ) + log( n^n ) - log( e^n )
〜 log n + n log n - n
O( n log n ) > O(log n) && O( n log n ) > O( n) より
O( log(n!) ) == O( n log n ) ■
0955デフォルトの名無しさん
NGNG943 の方が正解(VC6のSTLを除く)
0956デフォルトの名無しさん
NGNG次スレよろ
0957デフォルトの名無しさん
NGNGという場合、自分でループをまわしたらいいんでしょうか?
0958デフォルトの名無しさん
NGNGSTLPort
http://www.stlport.org/
VC++のSTLバグ
http://www.dinkumware.com/vc_fixes.html
ISO/IEC 14882
Programming languages -- C++
http://webstore.ansi.org/ansidocstore/product.asp?sku=ISO%2FIEC+14882%2D1998
http://www.kuzbass.ru/docs/isocpp/
あと適当なサイト(いらんか?)
http://www-scc.tokyo.jst.go.jp/riyou/users/users_guide/ucoma/FJcompiler/C++/stdlib/stdug/general/
http://www.wakhok.ac.jp/~sumi/stl/
0959デフォルトの名無しさん
NGNGmyvect.reserve(myset.size());
copy(myset.begin(), myset.end(), back_inserter(myvect));
の方がよろしいかと。
0960デフォルトの名無しさん
NGNG0961デフォルトの名無しさん
NGNG960の方です。
次ぎスレよろ。
0962デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/tech/1026793823/
0963デフォルトの名無しさん
NGNG0964デフォルトの名無しさん
NGNGhttp://pc3.2ch.net/test/read.cgi/tech/1026793823/
0965デフォルトの名無しさん
NGNG0966デフォルトの名無しさん
NGNG\ / \〇ノゝ∩ < 1000取り合戦、いくぞゴルァ!!
\ /三√ ゚Д゚) / \____________
\ /三/| ゚U゚|\
\ ,,U (:::::::::::) ,,、,、,,, \オーーーーーーーッ!!/
\ //三/|三|\ ∧_∧∧_∧ ∧_∧∧_∧
1000ゲトー \ ∪ ∪ ,,、,、,,, ( ) ( ) )
∧∧ ≡≡≡ \ ∧∧∧∧∧ ∧_∧∧_∧∧_∧ ∧_∧∧_∧
(゚ー゚*) 、 ≡≡≡ < 千 > ( ) ( ) ( )
O┬Oc )〜 ≡≡≡ .< 取 >
(*)ι_/(*) ≡≡≡. < 予 り >
―――――――――――< 合 >―――――――――――――――
< 感 戦 > ∧_∧
い、今だ1000ゲットォ!! < !! の > 1000ゲットしますた ( ´Д` )
.∧ ∧ =- /∨∨∨∨∨\ /, /
(゚Д゚;) ≡=- / \ (ぃ9 |
⊂┯⊂) ≡=- / \ / /、
(ヽ\ ヽ ) ≡=- ./ \ / ∧_二つ
し\J =- /今だ!1000ゲットォォォォ!\ . /  ̄ ̄ ヽ
(( ̄(◎) ≡=- / ∧∧ ) (´ \ / /~ ̄ ̄/ /
. / ⊂(゚Д゚⊂⌒`つ≡≡≡(´ ;;;≡.\ )⌒ _ ノ / ./
/  ̄ ̄ (´⌒(´⌒;;.\ \ | / ( ヽ
.し \__つ
0967デフォルトの名無しさん
NGNG|☆
|. ゚ヽ、
|o . \
| 。 ゚ .丶.
|。 ': : 。 ヽ、
| ..::::: _..,,,}
|--‐‐''''"~ `:、`、
| '、:::::}:::::::`:::::::::〉
|、.ヾル'ヾ`|:}..:}/
| i``i、lリ`)
| { ゚ツ }l|::} ダレモイナイ・・オドルナラ イマノウチ
| 、 ノi.|::l
| - ィ i リヽ、
|- ''´ | i iノ:::::::ゝ、
| '"~.ノ.ノ:::::/⌒}
|._,,ァ'´ィ::::;イ }
|-‐''"::::::/ ノ ノ
|Å::::::::::「/ l
|' \::::/ l
|Д`;)ノ-‐''"⌒}フ
0968デフォルトの名無しさん
NGNG♪ /~\ ランタ タン
,,..::´ .。'' . ゚ヽ ランタ タン
♪ ,ァ'´ o . \ ランタ ランタ
,..:'´ ,::o:: :゚: 。: 。 : ゚ .丶、 タン
{,,,..._ ‐- .::/::. ・: ....::::: _..,,,}
/:::::::::~"''''‐‐--=--‐‐''''"~ `:、`、 Å
〈::,':::::i..:{..:,' .l:.;{:l: '、:::::}:::::::`:::::::::〉 / \
Å ヾ/:::::::(リルノiハ.:、.ヾル'ヾ`|:} }/ ヽ(´Д`;)ノ
/ \ i|、|.:::},ィ''l` ´i``i、 lリ:`) ( へ)
ヽ(´Д`;)ノ .|::l|. i'゚j, {'゚ツ }l|::} く_ `.}
( へ) I.:{''、 、 ,:'i:|::l l._,,_ _}'
く_,, `ゝ l::} ` 、. ー ._.ィ {::lノ |. ~l
ヽ_ノ'~ ヽ、 .i::{ ` i':::ー::´i |::} l }
\ ` ‐┬ー--‐i;|i⌒"ヾ~ "i }リ⌒''iー---‐┬イ }
ヽ、 .| リ:::`ヾヽ` '' ̄ /ノ::::::::::} | .ノ
`'‐-┤ヽ {:::::::::::ヽ`.‐-‐イ/.:.::::::::l . ├-‐''"
{ \ .i::::::::::::::::`:"''"~::::::::::::::}. ノ }!
└----‐‐ノ:::::}::::::::::::::::::::::::::::::::::テ----‐‐┘
0969デフォルトの名無しさん
NGNG♪ /~ \ ランタ ランタ
,,.:´ .。'' . ゚ヽ ランタ タン
.,ァ'´ o .゚ \ ランタ タンタ
,..'´ ,::o:: :゚: 。: 。 : ゚ 丶、. タン
{,,,..._ ‐- .::/::. ・: ....::::: _..,,}
Å /:::::::::~"''''‐‐--=--‐‐''''"~ `:、`、
/ \ 〈::,':::::i..:{..:,' .l:.;{:l: '、:::::}:::::::`:::::::::〉 Å
ヽ(;´Д`)ノ ヾ/:::::::(リルノiハ.:、.ヾル'ヾ`|:} .}/ / \
.(へ ) i|、|.:::} ,ィ'".l ´i`i、lリ`) ヽ(;´Д`)ノ
{ _> |::l|{ / i,"゚j. {ツ }l|::} (へ )
l._,,_ _} I.:{li''、 , }i:|::l { _>
.l ~'| l::}. ` 、 - , イ {::lノ .ム,_ 〉
| l .i::{ i` ー 'i,´ .|::} / ヽ/
{. メ-┬ー--‐i;|i⌒"ヾ~ "i }リ⌒''iー---‐┬イ /
.i | リ:::`ヾヽ` '' ̄/ノ::::::::} | ノ
`'‐---┤ 、 {:::::::::::ヽ`.‐-‐イ/.:.:::::::]l . ├-‐'"
i| ヽ i::::::::::::::::`:"''"~::::::::::::::::}. ノ }
└----‐‐ノ:::::}::::::::::::::::::::::::::::::::::::テ----‐‐┘
0970デフォルトの名無しさん
NGNG.,'~ '`、
/ . * ヽ
/ 。 .ヽ
♪ / o ゚ . ヽ、 ランタ タン
/ ヽ ランタ タン
♪ / * 〇 丶.
/ . ・ 。 ゚ ヽ
ム,..._ ._..,,,} Å
/:::::::::~"''''‐‐--=--‐‐''''"~ `:、`、 / \
〈::,':::::i..:{..:,' .l:.;{:l: '、:::::}:::::::`:::::::::〉 ヽ(´Д`;)ノ
ヾ/:::::::(リルノiハ.:、.ヾル'|:}:::::::}::/ (へ )
i|、|.::},ィ"l` ´i``i、lリ:l`i::ノ / _>
.|::l| i,'゚j, { ゚ツ }l|::}ノ::}. ム,_ 〉
Å I.:{{ ,.,. 、 ,.,. .i:|::l:ノ. / ヽ/
/ \ l::}. ` 、 ー .. イ{::l _,,::-‐''" /
ヽ(´Д`;)ノ i::{ `'iー: ´ i |::}'"ヾ" ヽ ノ
(へ `―r-―---‐┬ー--‐i;|i⌒"ヾ~ `i }リ:::ヽ . }‐''´
ヽ > | ヽ | リ::::`ヾヽ` '' ̄ /ノ::::::i} .}
\_ ├----―‐┤ヽ ,.,_ .{:::::::::::::ヽ`.‐-‐イ/.::::::::l .}
 ̄ .|{ i::::::::::::::::::`:"''"~:::::::::::::}. ._,,::-'
└-----‐‐{:::::;::::::::::::::::::::::::::::::::::::::ル'
0971デフォルトの名無しさん
NGNG,'~ '`、
/ . * ヽ
/ 。 .ヽ
/ o ゚ . ヽ、
/ ヽ
/ * 〇 丶. ランタランタ タン
/ . ・ 。 ゚ ヽ
.ム,..._ ._..,,,}
. /:::::::::~"''''‐‐--=--‐‐''''"~ `:、`、
〈:::,':::::i..:{..:,' .l:.;{:l: '、:::::}:::::::`:::::::::〉
ヾ/:::::::(リルノiハ.:、.ヾル'ヾ`|:} }/
(i|、:|.:::}. ,ィ'".l i``i、lリ`)
|::l|/ i,"゚j. {'゚ツ }l|::}.
I.:{{ ,.,. , ,.,. ノi:|::l
l::} ` .、 - .,.ィ´:{::lノ
i::{ i` ー ' i _|::}
,..i;|<ヾ" "i }ーヽ、
ァヾ:リ::`ヾ、ヾ` '".ノ.ノ::::::::::ゝ、
/ ヾ:::::::::::ヾ`Å‐'/..::::::::/⌒}
{ i:::;::::::::::/ \:::::::;イ }
{ {:::l::::ヽ(´Д`;)ノ/ ノ ノ
0972デフォルトの名無しさん
NGNG| \
|Д`) ダレモイナイ・・オドルナラ イマノウチ
|⊂
|
♪ Å
♪ / \ ランタ タン
ヽ(´Д`;)ノ ランタ タン
( へ) ランタ ランタ
く タン
♪ Å
♪ / \ ランタ ランタ
ヽ(;´Д`)ノ ランタ タン
(へ ) ランタ タンタ
> タン
0973デフォルトの名無しさん
NGNG|ー゚) ダレモイナイ・・オドルナラ イマノウチ
|⊂
|
♪
♪
♪ ∩ ∧_∧ ハニャ、ニャン
ヽ (*゚ー゚) ハニャ、ニャン
ヽ ⊂ ヽ ハニャ、ニャン
O-、 )〜 ニャン
U
♪
♪
♪ ∧_∧ ハニャ、ハニャ
(*゚ワ゚)⊃ ハニャ、ニャン
ヽ⊂ 丿 ハニャハニャ
⊂ _ / ニャン、シィー!!
し
0974974
NGNG0975デフォルトの名無しさん
NGNG0976nanashi
NGNGvector <char *>test;
//でtestをいろいろといじって//
vector <char *>test2;
test = test2;
とやっても受け渡しはできないようです。
普通のポインタ受け渡しみたいにはいかないのか・・・//
0977デフォルトの名無しさん
NGNG新スレでアゲ炉
0978デフォルトの名無しさん
NGNG>test = test2;
たぶん成功してると思うよ。
test2の中身(からっぽ)がtestに複製されているはず。
0979デフォルトの名無しさん
NGNGchar*なんて入れるなYO..
周りの幸せの為にstd::string覚えろ
0980デフォルトの名無しさん
NGNG極めて禿ちゃうYO
0981デフォルトの名無しさん
NGNG0982デフォルトの名無しさん
NGNG|Standard Template SAGE.|
|___________|
∧∧ ||
( ゚д゚) ||
/ づΦ
0983デフォルトの名無しさん
NGNGなにげに1000とり合戦スタートぎみだけどね、、、、、
0984デフォルトの名無しさん
NGNG0985デフォルトの名無しさん
NGNG0986strrev("&rlo;)"
NGNG0987strrev("&rlo;)"
NGNG0988strrev("&rlo;("
NGNG0989abc&rlo;123&rlo;789
NGNG0990デフォルトの名無しさん
NGNG0991991?
NGNG0992992!
NGNG0993993
NGNG0994994
NGNG0995ジサクジエーン
NGNG0996996
NGNG0997997
NGNG0998998
NGNG0999999! ◆BY1yLOVE
NGNG本当は全てジサクジエーンでした。
ごめんなさい。
非礼を詫びたいので
僕のケツに根性入れて下さい。
 ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∧ ∧ ミ
ハァハァ(∀・;;/⌒◯
| 八 r 丿
(_)(_)__)
o
O
(⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒)
( アレ、カラダガホテリダシタヨ )
(__________)
1000 ◆BY1yLOVE
NGNG初めての1000ゲット!
 ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄
__∧∧__
/\(゚ー゚*) \ (´´
\/| ̄∪ ̄ ̄|\ (´⌒(´
\|____|≡≡≡(´⌒;;;≡≡≡
(´⌒(´⌒;;
ズザーーーーーッ
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。