[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 06/27 01:24 / Filesize : 192 KB / Number-of Response : 847
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん [2008/02/27(水) 02:03:30 ]
C++標準ライブラリの一つ、STLについて。

前スレ
【C++】STL(Standard Template Library)相談室 8
pc11.2ch.net/test/read.cgi/tech/1198435319/

過去ログ・リンク・書籍紹介は >>2 以降

577 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 22:57:16 ]
>>576
ありがとうございます
エラーは出なくなりました。

でも、 typename がなぜ必要なのかわかりません。
どこを調べたらいいのでしょうか?

578 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 23:14:34 ]
>>577
一度、Effective STLを読んでおいた方がいいんじゃないか?

579 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 23:20:22 ]
>>577
www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=C%2B%2B+template+typename&num=50

580 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 23:22:34 ]
型なのかメンバ変数なのかハッキリしろコラァ!
とコンパイラが怒るから

581 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 10:23:16 ]
この文脈では list<T>::iterator のTは型に決まってるだろ、と小1時間ほど問い詰めてやりたい


582 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 10:31:12 ]
Tじゃなくて、iteratorが型かどうかわからない。

583 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 11:24:32 ]
template<typename T> struct list{ enum{ iterator = 0 }; };
だったらlist<T>::iteratorをする時にはtypenameの代わりに何が必要なのか

584 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 12:45:15 ]
>>583
何もいらない。
typenameがないときは、暗黙のうちに値として扱われるよ。例外もあるけど。

585 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 12:50:33 ]
>>581
実際VC++だとtypename無くても通るっぽい?
賢いというよりテンプレート宣言を読むときは「あーはいはい」って感じで
実際に型当てはめてからチェック開始してるのかね



586 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 19:36:19 ]
>>582
なるほど、
typename list<T>::iterator m_iter;
は list<T>::iterator がタイプ名だとコンパイラに教えているのか
やっと納得できた


587 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 01:04:10 ]
C++続けるつもりなら読むべきものをまず読んどけ

588 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 02:06:07 ]
SICPですね、わかります

589 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 02:43:43 ]
SICPとはまた時代遅れの物を

590 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 22:33:28 ]
TR1のお勧め参考書おしえてくれ

591 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 22:40:10 ]
>>590
つTechnical Report 1

592 名前:デフォルトの名無しさん [2008/05/31(土) 01:30:22 ]
ちょっと質問です。

STL辺りに「テーブルクラス」なんてありますか?
イメージとしては、データベースのテーブルをオブジェクトとして扱うクラスです。

result = DBDATA.summary(var1) ;
こんな感じです。

593 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 02:36:59 ]
>>590
EffectiveC++の第三版はtr1にちょっと触れてる

594 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 07:56:28 ]
>>592
イメージとしては、データベースのテーブルをオブジェクトとして扱う
クラスはない感じです。

595 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 12:12:08 ]
>>592
STLだけでやるなら、連想系コンテナとアルゴリズムを組み合わせる感じかね。



596 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 12:19:01 ]
>>590
とりあえずboost本買ってみるのは

597 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 14:49:33 ]
>>592
where句が限定されているならmapでいいんじゃないの?
っていうかDB的に使うなら普通にsqliteでも使った方が無難だよ。


598 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 15:20:14 ]
O/Rマッパーが欲しいんじゃね
DataSetとか

599 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:37:03 ]
mapは、要素の追加または削除を行ってもそれ以外の要素の参照は保たれたままな事が保証されていますか?

600 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:38:01 ]
追記です。要素への参照の他に、キーのについても同じ事が言えますか?

601 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:40:26 ]
自己解決しました。ありがとうございました。

602 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 23:09:11 ]
死ね

603 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 23:43:37 ]
死ねっていう奴と
死ねって言われた奴は
死ねばいいのに

604 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 23:59:17 ]
そして伝説へ・・・

605 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 00:06:56 ]
死んでもそれ以外の人の参照は保たれたままな事が保証されていますか?



606 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 01:00:47 ]
死して屍拾う者なし、ってメモリリークのことですか?

607 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 08:44:19 ]
GC「骨くらいは拾っておいてやるよ」

608 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 08:45:30 ]
デストラクタ「生ける者の為の卒塔婆」

609 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 13:11:39 ]
std::mapのイテレータに順ずるものから、木構造の右部分木、左部分木をそれぞれ取得して
木を追跡したいんですが、そういうことは可能でしょうか?

610 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 13:13:10 ]
赤黒木使ってたら左部分木と右部分木だけとは限らないよ
アルゴリズムの本読んでみ

611 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 13:17:24 ]
>>609
std::map が木で実装されているとは限らないので、そういう操作は無い。

木の追跡(?)自体がやりたいわけじゃないと思うんだけど、結局のところ何がしたいの?

612 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 13:26:33 ]
>>611
upper/lower_boundで解決しました。

613 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 13:36:39 ]
やっぱり解決しませんでした。もういいです諦めます。STL死ね。

614 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 13:41:17 ]
お前が死ね

615 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 14:21:17 ]
すぐファビョる所を見ると朝鮮人か



616 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 14:23:03 ]
私が死ぬのであなた達は死ななくてもよいのです

617 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 15:05:12 ]
STLは生き物ではないので死ぬことはできません

618 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 15:18:03 ]
私のお墓の前で泣かないでください

619 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 15:46:50 ]
STLの考え方に頭が付いていかない所を見ると
頭が悪いかジジイかのどちらかだろう

620 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 16:07:29 ]
お尋ねします。
vector<vector<bool>> TempA;
vector<vector<bool>>::iterator itr1;
vector<vector<bool>>::iterator itr2;
と宣言したとします。
itr1 = TempA.begin();
itr2 = TempA.begin();
としたのち、
TempAのたとえば2行目と3行目の中身すべてを比較したいとき、
itr1++;itr2 += 2;としてiteratorを進めて、
*itr1 == *itr2の比較を一度行えばいいのでしょうか?
それとも、各行でiteratorを作成して、
各行ベクトルの列座標に対応したiteratorを回す必要がありますか?

p.s.この動作のあと、一致している行を、
itr2=Temp.erase(itr2);
みたいに削除したいのです。

621 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 16:34:38 ]
>>620
要するに二つのvectorを==で比較できるかってことだよな
できるよ

622 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 16:46:22 ]
>>621
ありがとうございます。
行に対応するvectorの各要素の比較という認識で大丈夫でしょうか。

623 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 18:17:13 ]
そう。要素ごとに==で比較してる

624 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 18:19:40 ]
>>622
23.1 Container requirements に
a == b は a.size() == b.size() && equal(a.begin(), a.end(), b.begin())
と等価と書いてある。

625 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 22:12:31 ]
>613
map使わずにソート済vector使えばいいんじゃね?



626 名前:620 mailto:sage [2008/06/05(木) 10:43:24 ]
>>623
亀レス申し訳ない。
ありがとうございました。

そういう情報ってどのヘッダーを見ればいいんでしょうか?
vector.hを眺めていてもさっぱりです…。

627 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 11:34:56 ]
>>626
ヘッダーには書いてないだろう・・・
お使いのコンパイラのリファレンスマニュアル等を読め
VCならこのへん↓
msdn.microsoft.com/en-us/library/5asks2ba(VS.80).aspx

628 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:25:16 ]
>>626
C++の規格書一回読んでみるのもいい。

629 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 20:20:37 ]
vectorかその内部でincludeしてるファイルに書いてあるんじゃね。実装が。

630 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 10:17:16 ]
イテレータを返すbegin, endが、どうして戻り値の型が違うだけで(iterator, const_iterator)オーバーロードされた関数を特定できるのかが分かりません。
自分で同じ様な事をしようとしてもSTLとは違いコンパイラが関数を特定できずに失敗します。

631 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 10:22:06 ]
>>630
戻り値の型じゃなくて、引数リストの後ろの const の有無が違う。

632 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 10:36:05 ]
>>631
それは実装側のbegin, endの定義ですよね?
自分で作ったものもconst_iteratorを返すものは引数リストの後にconstをつけているんですが、
これは利用する側が呼び出すときには特に関係ない様です。
まさか container_type::const_iterator it = ((container_type::const_iterator (container_type::*)()const)container.begin)();
なんてしなきゃいけないんですか?

633 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 11:24:47 ]
iteratorからconst_iteratorへの変換はできるようになってる?

634 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 11:27:59 ]
変換できるようにしたら const_iterator begin() const の必要性なくならないか?

635 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 11:31:44 ]
なんで?
constなインスタンスに対してイテレータ取得できなくなっちゃうじゃん



636 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 12:59:04 ]
VC7

template<class _Ty,class _Alloc>
class _Vector_iterator : public _Vector_const_iterator<_Ty, _Alloc>

637 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 19:44:07 ]
>>636
補足しとくと、iteratorは基底クラスであるconst_iteratorに変換できるといいたいだけ。
constなしbegin()の戻り値はiteratorだからconst_iteratorにも変換されうる。

begin()の戻り値を渡す先がconst_iteratorかiteratorかで、
begin()の種類(後ろにconst付きか否か)が選択されているわけじゃない。

638 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 22:14:29 ]
>>632
MyContainer c = ...
MyContainer const& cc = ...
MyContainer::const_iterator = c.begin();
MyContainer::const_iterator = cc.begin();

これをトレースするといいよ。

639 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 00:30:21 ]
なるほど、constなメンバ関数はオブジェクトがconstな時に使用されるんですね。

640 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 13:26:16 ]
constメンバ関数と非constメンバ関数が両方ともある場合はそうなる。
非constメンバ関数がない場合は非constオブジェクトからもconstメンバ関数が呼ばれる。

641 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 20:31:07 ]
\n とか \r\n とかが入った文字列を SetDlgItemTextすると
char のときはちゃんと改行してるのに string だと改行されずに何も表示されないわけですが
string って \n とかとは別に改行とかタブコードがあるんでしょうか?

642 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 20:40:55 ]
実際のコード貼ってみれ

643 名前:641 mailto:sage [2008/06/13(金) 21:37:36 ]
あははははは!!!!!
エディットコントロールのマルチラインがFalseなだけだった
俺市ねw

644 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 22:13:13 ]
641は死んだの?

645 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 22:49:25 ]
>>644
今日までの641は氏に、また一歩成長したプログラマーとして生まれ変わるのです。



646 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 12:34:34 ]
>>645が良い事言った

647 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 15:25:44 ]
フェニックスシングルトンなわけですね。

648 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 15:30:12 ]
シングルトンを真面目に考えるとややこしい事限りないなあ。

649 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 15:31:25 ]
非常に優秀なデザインパターンの1つだと思うな

650 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 15:36:29 ]
インスタンスの数が1個に限定される分、むしろ単純にならないか?

651 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 15:39:16 ]
Modern C++ Design を読むと
シングルトンのややこしさがよく分かる。
Scala みたいに言語的にサポートしてくれればいいんだが。

652 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 15:48:11 ]
作るのはいいけど削除のタイミングが面倒くさいんだよね。

653 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 15:53:21 ]
いつでもnewdelete出来るように改良した、って自慢げに変なシングルトン使いまくる奴ならいたな

654 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 15:58:26 ]
deleteしたら自動的に新しいインスタンスが作られて、
newしたら自動的に今あるインスタンスが削除されるシングルトン

655 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 16:51:25 ]
>言語的にサポート
使う人間のスキルへの依存度が高いC++に期待してはいけないものだよ。



656 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 16:59:25 ]
シングルトンて心太に似てるよね

657 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 18:36:28 ]
STLを軽く弄るためにこのスレを覗きにくるC++ビギナーはフェニックスシングルトンとModernC++Designをどうやって関連付けて考えるだろうか。

658 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 18:37:22 ]
「スレ違い」 と関連づけて考える事だろう

659 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 19:42:54 ]
mapはどうやってfindなどで入力されたキーが木にあるキーと同じかどうかを見るんでしょうか?
比較関数ならstd::less<T>がデフォルトで入っていてこいつを使えば良いと分かるんですか、
これと同じ様に一致関数をテンプレート引数で指定できませんか?

660 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 19:45:23 ]
比較関数をltとすると、
!lt(x, y) && !lt(y, x)
で一致判定してる

661 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 19:46:43 ]
マップのキーは、その比較関数を使って一致を判断する
!(a < b) && !(b < a) なら a と b は一致していることになる

662 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 20:12:24 ]
そして等価と等値の話が始まる。

663 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 22:07:44 ]
重要な概念だしな

664 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 09:53:59 ]
そしてEffective STL が売れる

665 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 10:08:08 ]
そして日本語版Modern C++ Designが叩かれる。



666 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 15:05:30 ]
ListとかVectorってスレッドセーフですか?
複数のスレッドからイテレータ取得してアクセスしたりするなら
シグナルやミューテクスでロックしてからアクセスするべきですか?


667 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 15:10:46 ]
そうですね。

668 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 15:16:56 ]
>>666
実装次第。
各処理系のマニュアルを読むよう。

669 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 15:29:14 ]
STLportでぐぐらない方が良い。

670 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 20:02:10 ]
スレッドセーフなのか?という問いに答える者はいなかったといふ


671 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 20:04:49 ]
実装次第だし。

672 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 20:09:48 ]
スレッドセーフではない と一律で答えておいたほうが面倒がない

673 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 21:24:55 ]
Camelなリストやベクタはスレチ。

674 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 21:43:27 ]
というか、「スレッド」の概念が標準C++にあるんだっけ?

675 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 21:54:49 ]
ございません



676 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 22:07:35 ]
スレッドの概念が無いから「スレッドセーフでない」という概念も無い。

677 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 22:15:17 ]
C++0xにご期待下さい






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<192KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef