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


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

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



1 名前:858 [2007/12/24(月) 03:41:59 ]
C++標準ライブラリの一つ、STLについて。

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

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

552 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 12:08:05 ]
>>546
double v[i][j];
より
std::vector< std::vector<double> > v(i, std::vector<double>(j));

std::vector< std::vector<double> > v(i);
std::for_each(v.begin(), v.end(), std::bind2nd(std::mem_fun_ref(&std::vector<double>::resize), j));
の方が美しいと感じるようだ。

553 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 12:21:14 ]
どうしても知識をひけらかしたい奴がいるようだ。

554 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 12:29:59 ]
馬鹿か?
typedefしろよ

555 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 12:30:33 ]
あんまりしょうもないtypedefたくさん作らないで欲しいお…

556 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 12:35:53 ]
グローバルスコープでないならまだ許せる

557 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 12:50:03 ]
typedef vector<int> vector_int;
typedef vector<double> vector_double;


こんなのがtypedefs.hに延々ならんでるソースを見せられたときは会社やめようかと思った。
結局1年しか勤めなかったけど・・

558 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 13:15:32 ]
>>557
なにがあかんねん

559 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 13:17:39 ]
>>558
いみないやん

560 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 13:18:26 ]
まぁ普通意味を考えて命名するよな

#define VALUE_100 100

て定義する様なもの



561 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 14:29:30 ]
>>557
そのレベルだと好みが分かれそうだなあ
vector<string> string_list
とかはありがちだけど。intとはな。。

562 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 14:32:11 ]
vectorなのにlist?

563 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 14:36:40 ]
>>561
そういう問題じゃない。

・typedef名に意味付けがない
↓のようなコメントと通じるものがある
a += 100; // aに100を足す

・字数がほとんど変わらず、打鍵数減少につながらない

…ところで、あなたは list<string>をどのようにtypedefするの?

564 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 14:39:41 ]
んなマジレスされても。。名前考えんのめんどうだからしないねくらいだが

565 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 14:48:34 ]
557に意味がないわけじゃないけどな。

typedefされた型しか使わないというのは、
互換性を重視するときは有利になる。

566 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 14:51:03 ]
>>565
具体的にどんな移植性の問題が typedef によって解決されるんでしょうか?

567 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 14:54:21 ]
>>565
typedefはそういう用途に使えることは否定しないけど、
vectorもintも標準の一部だから、互換性の点でもtypedef vector<int> vector_int;とする意味は無いんじゃないの。

568 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 14:55:54 ]
>>566
typedefが移植性のためにあるようなものなのにな。
なぜなにの子供か?

569 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 14:56:04 ]
もしかしてあれか? int のサイズが違う環境では
typedef vector<long> vector_int;
に置き換えて「すっきり解決」とか、そういう話か?

570 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 15:01:04 ]
intのサイズ違いをそのレベルで解決すべきじゃない。



571 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 15:03:50 ]
つsize_t/off_t

572 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 15:05:24 ]
だからやっぱり vector_int は意味無いだろ >565

573 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 15:31:24 ]
std:: を省略できれば打鍵数が結構減る。

574 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 17:22:02 ]
打鍵数とかでなく、会社からSTLは一律typedefせよ の命題が
課せられれば、vector_int みたいなものは生まれるし、それでもよいと思うぞ。

だから >>557 がどうこう言う程の問題ではないと思われるが。
こういうのは出たての若いのによくいる 自分は社内でも皆よりよく分かってる と
思いこんでる井の中の蛙ってこった。

575 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 17:31:06 ]
std::foreachとかどうやってtypedefするの?

576 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 17:34:44 ]
>>574
そんな命題を甘んじて受けるほど奴隷ではありません。


577 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 17:35:12 ]
>>574
その通り、会社の方針なら勤めてる以上は従わざるを得ないのは言うまでもない。

そこで、無能だったり考え方の一致しなかったりする上司の下で働く羽目になった場合に取り得る行動は、
我慢して働きつづけるか、さっさと辞めるかの二者択一で、>>557は後者を選んだだけだろ。
別に非難されるようなことではない。

578 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 17:36:14 ]
>>574
それは無能なプログラマが無能な会社に変わっただけで、>>557の判断には影響ないだろw

579 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 17:39:09 ]
>>576
それで問題が発生したとき責任取って解決できるのなら
それでも良いんじゃね? いざとなったら逃げるのはただの口だけ君。

580 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 17:43:00 ]
vector<vector<vector<int> > >みたいなものを書かざるをえない状況なら
vector<T>をtypedefすることもあるんじゃないかな?



581 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 17:43:44 ]
>>579
会社の命令に背いて問題を起こすなんて選択肢はもとからないよ

常識があれば、「従う」と「去る」の二択しか取れない

582 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 17:43:51 ]
そんな当たり前の事言われましても。

583 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 17:48:52 ]
>>566
このケースでvector<int>は必要なかったとしても、
list<string>はtypedefしたほうがいい。
とすれば、必要あるなしの境界はどこで切る?

こういう皆が使って判断の微妙な境界線は、
「一律typedef」が安全。

584 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 17:53:28 ]
STLって型によらずアルゴリズムを記述できるような抽象化を
目指して作られてるはずなのに、ソースはtypedefだらけ。
それを異常と感じないほうがおかしい。

585 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 17:55:26 ]
抽象的な書き方をしない箇所もある。適切にtypedefすることには何の問題もない。

586 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 18:03:04 ]
そもそもどういう理由でtypedefしてるの?

587 名前:デフォルトの名無しさん [2008/02/02(土) 18:04:36 ]
>>584
抽象化するためにtypedefが必要だったりするし、STLなんかtypedefだらけだけど?

588 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 18:12:31 ]
>>581
まぁね。 ドラマのまねっこで「僕はそんなことはできません」なんて
楯突いてその後その人間同士が上手く行くことなんてまぁないからね。
ドラマはご都合主義だから上手くいくけどさw

589 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 18:17:26 ]
>>588
自分も会社の一員だけどね。そういうこだわりのない人間が集まってるから駄目な会社になったとも言える。

590 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 18:17:50 ]
>>574
仕事ってオブジェクト(?)をもっと理解した方がいいよ。

逆に考えて、君がお客で 奴隷とかいうのが車屋の店員だったとする。
君は赤色の車を注文した。 しかし店員は「いやいまのトレンドは白です。
そこは譲れません」 と言ってるのと大して変わらん。



591 名前:590 mailto:sage [2008/02/02(土) 18:21:36 ]
アンカー違い >>576 へ訂正


592 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 18:24:24 ]
本日の課題

授業単元:コンピュータ理論
課題:本字の流れをvectorとlistを使って表しなさい。但しtypedefは使わないものとする。




593 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 18:27:27 ]
販売拒否も車屋の勝手だろ
それで商売になるならそれでいいし、ならないなら別のことをするだけだ
意に反して赤い車を売らされることはない。もちろん妥協して赤い車を売ってもいい

594 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 18:33:44 ]
>>590
それは違うだろ


595 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 18:43:17 ]
>>593
おまえ尾崎豊の歌大好きだろ?w

596 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 18:59:03 ]
>>595
ほとんど聴いたことすらないww

597 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 19:31:33 ]
typedef厨いる?

598 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 19:42:18 ]
まあたいして責められてるわけでもないのに
いきなり奴隷なんて言葉を使い出す輩とは
あまり議論もしたくないな、おれは。
どこぞのウィルス流してつかまったヤツを想起してしまうよ。

599 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 19:49:14 ]
>>587
それは抽象化とはいわん。単なる簡略化。
型の違いを意識の外に放り出してしまえるのが本来の抽象化。
現実はその逆。

600 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 19:49:59 ]
個人でやってる分にはいいが、人が動かせない大きな岩(プロジェクト)を
動かすには、全員が力合わせて同じ方向に綱引かないと成功なんか
ないよね。 俺は反対に引きたい とか関係ねーよ。
社会の歯車とかTVで憶えた訳分からん言葉に流されるべからず。




601 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 19:54:16 ]
>>599
std::binary_functionの中とかでやってるtypedefはどう考えても抽象化のためだろ?

602 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 19:56:43 ]
>>600
本心は別だろ?w
マが鬱になる原因はそういうところが始まりなんだよ?

603 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 19:58:08 ]
>593
本当は「会社として金を儲けるにはどうすりゃいい」というのに従うべきなんだけどな。
車売って利益上げるのが商売なんだから。

>586
色々。主に抽象化と手抜き。一例として
template<template<class>class trail_t>
struct Policy {
  typedef trail_t<Policy<trail_t> > Trail;
  // (snip)
};
template<class policy_t> // Policyの派生型を取り込むことを想定
class S {
  typedef policy_t Policy;
  typedef policy_t::Trail Trail;
  // Trailをバンバン活用
};

といった感じで手が抜ける。



604 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 19:58:17 ]
>>601
使ったこと無いから知らん
それにここまでの話の流れじゃはそういうとこじゃないだろ

605 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 19:59:30 ]
俺は、木しか見ていない>>557より、森も見ている会社の
typedefs.hの方が賢いと思う。

606 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 19:59:50 ]
ミス
それにここまでの話の流れじゃそういうとこじゃないだろ
↑typedef乱用のところな

607 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 20:00:42 ]
>>604
使ったことないのね。了解。

608 名前:603 mailto:sage [2008/02/02(土) 20:01:43 ]
ごめん。policy_tはPolicyの派生型じゃ無いわな。


609 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 20:19:10 ]
>>602
本心は当然別よ。 本来人の考えが一致するなんて奇蹟ぐらいの考えで丁度いいよ。
映画あらしのよるに で上手く分かりやすく描かれてるよ。羊と狼が友情築くアニメ風のやつ。

610 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 20:37:17 ]
typedefs.h には元々プロジェクトの成功を見ていた2人の心を分かつ効果もありそうだ。



611 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 21:14:32 ]
つうかコンテナをvectorからdequeに変えたくなった時や
intじゃなくて複素数入れたくなった時に

vector_int

じゃカコワルイだろ

612 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 21:18:35 ]
おまいらソフトウェアプロジェクトマネジメントの本を読んでみ。「ピープルウェア」とか。
>600を実現するためにどれだけの苦労が必要かがわかる。
あくまでマネージャー視点だけど、プログラマ側からするとマネージャーの資質を
測るのに良いヒントになるよ。
ついでに「デスマーチ」もドゾー。現実は厳しいということを教えてくれる古典的名著。

613 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 21:19:56 ]
そんな話はマ板でやれよ

614 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 21:20:00 ]
>611 変えない……というのは冗談として。
そんときはリファクタリングじゃね?名前総取っ替えだろうね。

615 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 21:21:41 ]
>613 だったら>603にコメント入れろよ。放置されてバカみたいだろ。
他のtypedefの使いかたでも良いよ。

616 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 21:27:10 ]
だから vector_int には意味がなくて

typedef int Code;

typedef std::vector<Code> CodeList;

とか

typedef std::vector<Code> CodeSequence;

とかにしたほうが良いんじゃないのって言うのが良識のあるプログラマの意見じゃないかな

617 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 21:29:19 ]
このスレでまともにSTLの話をしているのを見たことがない俺

618 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 21:35:25 ]
文字コードの次はtypedefかお

619 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 21:40:05 ]
で、赤い車は買えたの?

620 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 21:48:46 ]
というか、おまいらTemplate使ってる?
Policyは非常に強力なコンセプトだと思うんだがね。

本当はもっと制約の少ないMix-in機能が欲しいけどね。
Policy同士で相互依存があると破綻しがちだから、けっこう設計が面倒。



621 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 21:49:24 ]
>619
あぁ、早速それ乗って近くの本屋にEffectiveSTL買いに行く予定だよ

622 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 22:12:32 ]
>>620
アレキサンドレスクの受け売りですか?

623 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 22:20:19 ]
メイヤーズもヴァンデヴォーデも質問したら
ちゃんと返事くれるんだな。できる人は違うわ。


624 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 22:20:59 ]
>>620
相互依存のあるPolicyなんて思い浮かばないんだけど
具体的にどんなの?

625 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 22:23:26 ]
あれってヴァンデヴォーデって読むのか……

626 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 22:23:56 ]
>622 基本的にはそんな感じなんだけど、Policyの組替えを想定してるんじゃなくて
単にデカいクラスのモジュール化をするときに使ったりしてる。

本当は包含とかでも何とかなるんだけどねぇ。
委譲関数書かなくて良いのが素敵なんで何となくポリシー使ってる。


627 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 22:26:16 ]
>>625
いや適当

628 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 22:27:48 ]
>624
もちろんきっちり設計してから組めば相互依存はほとんど無くすことができるんだけど、
トライ&エラーで設計するときはそんなこと言ってられないからね。
ルーズに始めるときは、たいてい相互依存バリバリだったりする…………

リファクタリングするときも相互依存した状態を経由するから、そういうときも不便。


629 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 22:32:02 ]
orthogonalってやつか

630 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 22:43:00 ]
>629
直交に分離するのは理想だけど、神様でもなければ一発でそんなに上手く行くわきゃ無いよな。





631 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 08:39:38 ]
std::map<T1, T2>をT2順に整列したものを使いたいんだけど、std::vector<std::pair<T1, T2> >に
コピーしてsortする方法だと、std::pair<T1, T2>が大きい時にコストがかかるのでイヤーン。
mapの要素へのポインタをvectorに格納してsortしたいんだけどうまくいかない。
std::vector<const std::pair<T1, T2>*>みたいの。
エロい人サンプルコード書いてくだちい。


632 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 09:21:28 ]
const pair<const int, int>* addressof(const pair<const int, int> &obj)
{
return &obj;
}

map<int, int> m;
m[0] = 3;

vector<const pair<const int, int>*> vec;
transform(m.begin(), m.end(), back_inserter(vec), addressof);

こんな感じ?

633 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 20:54:58 ]
ありがd。
でもソートも書いて欲しいよママン

634 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:28:39 ]
>633
そんな難しくもなさそうな気もするけど、まずはうまくいかなかったコードを書いてみれば?

635 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:39:37 ]
というか std::sortにbool op( const int *l, const int *r) { return *l<*r;}
を渡せば終わる話だからなー

636 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:44:01 ]
pair だからそれだと足りない。けどまぁその程度ではあるんでどういうところでつまるのかな、という方に興味があったり。

637 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:10:39 ]
こんなのは?意味違うかもしれんが。

typedef map<int, string> Mymap;

struct Mycomp {
 bool operator()(const pair<const int, string>* p1,
          const pair<const int, string>* p2) {
  return p1->second < p2->second;
 }
};

int main()
{
 Mymap m;
 //いろいろ挿入
 
 vector<pair<const int, string>* > vec;
 for(Mymap::iterator i = m.begin(); i != m.end(); ++i) {
    vec.push_back(&(*i));
 }

 sort(vec.begin(), vec.end(), Mycomp());

}



638 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:15:32 ]
sort_inserterみたいの作れば挿入とソートが一発で。コスト的にはあんまり美味しくないか。

639 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 00:02:14 ]
>>638
それなんてstd::set?

640 名前:デフォルトの名無しさん [2008/02/06(水) 00:15:23 ]
>>639
pairのsecondだけでソートってできるんだっけ?



641 名前:デフォルトの名無しさん [2008/02/06(水) 00:18:18 ]
あー失礼、compare指定すりゃいいだけだ。

642 名前:デフォルトの名無しさん [2008/02/09(土) 11:47:37 ]
vectorで使用したメモリ領域を開放する方法を教えてください。

vector<int> v;
v.reserve (100000);

ぐらいの領域を使った後

v.clear ();
cout << "capacity = " << v.catacity() << "\n";

capacityが100000を返してくるのですが、どうやって領域を開放したらいいのでしょうか?
v自体はまだ使うので消したくありません。




643 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 11:54:07 ]
vector<int>().swap(v);

644 名前:642 [2008/02/09(土) 12:01:01 ]
>>643
できた。ありがとう! お前まじ天才
さしつかえなければ、何をどうやって勉強すればお前みたいになれるのか教えてください。


645 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 12:03:27 ]
とりあえず

つ"Effective STL"

646 名前:642 [2008/02/09(土) 12:08:50 ]
買った。
これを読んで俺も天才になる

647 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 12:31:42 ]
天才って言葉の使い方間違ってる

648 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 13:05:16 ]
むしろ転載に近いよな。

649 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 13:29:09 ]
メイヤーズSTLはジョスティスの内容をパクってるものが多い。

650 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 16:10:30 ]
で っていう



651 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 17:58:50 ]
その本にじょてぃすすげー参考にしたって書いてあったから
じょてぃす買った俺が通りますよ。
じょてぃすは絶版になるべきではなかった。

652 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:19:14 ]
>>651
原書を読み漁ったおれもいますよ。平易な英語だから無問題。






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

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

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