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


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

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



1 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 12:01:17 ]
C++標準ライブラリの一つ、STLについて。

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

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

520 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 12:54:39 ]
enumを不要とか言うやつは素人

521 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 13:04:54 ]
enum要らないとか言う奴はただのバカかTMPしない人だろ

522 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 13:08:23 ]
>C言語であれば、ANDやOR等の演算を使って管理しますが、C++ではbitsetが利用できます。
この辺りで馬鹿を晒している。このサイトも勿論、私のダメサイトリストに載っている。

523 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 13:10:34 ]
じゃぁbitsetってなんに使うの?


524 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 13:13:37 ]
ビット単位のフラグの管理をせざるを得ないときに使うかなぁ。ま、そのときが来たら考えるよ。

525 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 13:16:23 ]
>>522
上級者のあなたがおすすめするサイトを教えてください

526 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 13:20:55 ]
>>523
>>519

527 名前:522 mailto:sage [2008/11/16(日) 13:23:15 ]
残念ながら今のところ、初心者に安心してお勧めでキルサイトは見つけていない。
したがって、申し訳ないが期待には応えられない。

ちなみに、私のダメサイトリストは正しくは、「初心者にはお勧めできない(≒ダメ)サイトリスト」だ。
中級者辺りが読む分には、(自力で確認できるノウハウもあるだろうから)まぁ、悪くないかもしれない。

528 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 13:34:14 ]
enumは型安全じゃないのが気に要らないな



529 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 13:35:07 ]
C++のenumは、|=するだけでキャストが必要な糞仕様

530 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 13:44:26 ]
俺は#define派
enumだとアセンブラソースから使えないから

531 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 13:54:37 ]
>>529
そもそもビットフラグで使うとは限らないわけで…

532 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 14:08:21 ]
>>519

unionに失礼だろw

533 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 16:05:41 ]
それは128ビットとかに使うぞ

534 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 09:37:02 ]
お前らみんな、unionさんに謝れ!

535 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 15:37:45 ]
アマチュアの俺からすると分からんのだけど、unionって実際の業務で使われてるの?
enumなんかは割りと使ってるんだけど

536 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 15:48:34 ]
>>535
使うこともあるよ。Cでbitsetもどきを実装するときとか。

537 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 17:54:37 ]
大きな数値から上位ビットと下位ビット分けたり

538 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 18:04:00 ]
・建前
unionは環境に激しく依存するから、使わない方がいい。

・本音
いまどきビッグエンディアンとか無いだろw



539 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 18:11:15 ]
オレも、エンディアン、ビット幅、signedの右シフト、除算の符号は実装決めうちで作ってる

540 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 18:14:14 ]
>>538
サーバ系では未だにSunが頑張っているから無視できないのよね。

541 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 18:33:05 ]
うにおんは組み込みCで以前使ってた事がある
おそらく今でも使ってる

542 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 18:45:55 ]
1の補数はもう絶滅でいいだろ

543 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 18:50:13 ]
引き算どうすんだよw

544 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 18:59:06 ]
負数の表現方法のことだろ。

545 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 19:17:14 ]
それは2の補数

546 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 19:19:57 ]
ja.wikipedia.org/wiki/%E7%AC%A6%E5%8F%B7%E4%BB%98%E6%95%B0%E5%80%A4%E8%A1%A8%E7%8F%BE

547 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 22:16:38 ]
よその言語だとASCIIにIEEE754も決め打ちと化しているものもあるよな。

548 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 23:10:13 ]
未だにIBMのサーバでEBCDICとかあるから油断できない



549 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 23:51:08 ]
>>538
俺はエンディアン入れ替えたいからunion使ってる。
union {
double a;
char b[8];
}

550 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 23:54:30 ]
つーかネットワークバイトオーダはbigだし
画像処理でもエンディアン入れ替えなんてよくやるでしょ

全部littleで済むと思ってる人ってどういう世界に生きてるんだ?

551 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 00:08:27 ]
意識する場面なんてほとんどないな

552 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 00:11:46 ]
>>550
そういうときに、必ずエンディアン変換を挟むコードを書いてしまう(あるいは書かない)
というのがエンディアン決め打ちのコーディングだと思う。

553 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 00:14:19 ]
#ifdefるだろjk

554 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 00:41:30 ]
いや、自動判断する。
例えばtiffはヘッダのIかMかで判断できるし、実行環境がどっちなのかはint foo = 0とでもして& fooをchar *にキャストして取り出せば判る。

555 名前:554 mailto:sage [2008/11/18(火) 00:51:28 ]
s/int foo = 0/int foo = 1/

まぁ、unionは使わないけれど。

556 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 00:53:15 ]
スレから脱線するが、標準の方法でエンディアンをコンパイル時に知る方法ってある?
実行時ならできるんだが

557 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 00:58:32 ]
boost/detail/endian.hppとかを見る限り、標準では無さそうだね

558 名前:デフォルトの名無しさん mailto:わざとだが sage [2008/11/18(火) 01:50:26 ]
>>556
コンパイル環境のエンディアンを?
それとも、ターゲット環境?



559 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 01:58:09 ]
>>556
VxWorksなら_BYTE_ORDERのdefine見れば分かるが他はしらん。

560 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 13:28:05 ]
>>554
PDP-11位だしな変態なの

561 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 14:44:19 ]
>>560
お前はSun、IBM、MIPSを敵に回した。

562 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 16:25:22 ]
vectorについてですが
array.reserve(array.size());
でぴったりのサイズに変わるかと思ったのですが変わりません。

大きなデータを扱ったりする場合、ぴったりのサイズで作り直した方が
メモリが節約できるかと思うのですが、なぜうまくいかないのでしょうか。
何かいい方法はないでしょうか?

563 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 16:28:10 ]
vector<T>(array).swap(array);

564 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 16:32:01 ]
reserveは拡大する方向にしか働かないのでは

565 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 16:36:13 ]
>>>562
§23.2.4.2.2
void reserve(size_type n);
2 Effects: A directive that informs a vector of a planned change in size, so that it can manage the storage
allocation accordingly. After reserve(), capacity() is greater or equal to the argument of
reserve if reallocation happens; and equal to the previous value of capacity() otherwise. Reallocation
happens at this point if and only if the current capacity is less than the argument of reserve().
3 Complexity: It does not change the size of the sequence and takes at most linear time in the size of the
sequence.

greater or qrual と書いてあるから等しいかもしくは大きいとなるので
ぴったりのsize()になる保証はない。

566 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 16:37:52 ]
おっと

equal to the previous value of capacity() otherwise.

ともあるから、縮小しようとしてもcapacity()は変化しない事になる。
詰まるところ>>563のようにスワップ技法に頼るしかない。

567 名前:562 mailto:sage [2008/11/20(木) 11:20:10 ]
>>563-566
出来ました。ありがとうございます。
サイズの縮小は出来ないんですね。勉強になりました

568 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 01:13:58 ]
今までイテレータが指してるコンテナのことをイテランドと呼んでたんですが
そんなの聞いたことないって言われました

ぐぐってもほとんど出てこないので不安になってきたんですが(「イテランド」だとゼロ…)
普通に使いますよね?



569 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 01:17:07 ]
はつみみです

570 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 01:18:50 ]
ぐぐった時点で気づいてるだろwwww俺は聞いたこと無いな
iterandにしたら多少出てくるけど、まぁスズメの涙ね

571 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 01:24:17 ]
あーやっぱり?
iterandは1000件くらい引っかかるから、わざわざカタカナにしないだけで
あっちでは普通の言葉かもしれないと思ってたんですが

じゃあ皆さんはイテレータが指してるコンテナのことはなんて呼んでるんでしょう
「イテレータが指してるコンテナ」ですか?

572 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 01:24:23 ]
イテレータが指してるコンテナ?

vector<int>::iterator it;
だと
vectorが「イテランド」になんの?


573 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 01:27:10 ]
例えば
vector<int> v;
vector<int>::iterator it = v.begin();

なら、itはvのイテレータで、vはitのイテランドです

574 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 01:38:03 ]
iterateeとか言ってみる。

575 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 03:09:59 ]
Pythonではiterable

576 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 03:40:26 ]
>>575
それは意味が全然違う

577 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 03:50:39 ]
iterable はまんまイテレータ(とみなせるもの)。

578 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 12:37:36 ]
itのコンテナ 程度にしか言わないな



579 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 12:54:20 ]
イテランドがまあ、何を指している言葉かは
 オペレータ⇔オペランド
からの類推でわかるけどさ。

それより世間一般ではイテレータなんだろうが、
俺はついついイタレータと読み書きしてしまう今日この頃。

580 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 13:15:51 ]
>>579
おいたが過ぎますぞ

581 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 17:24:11 ]
いてまうどー

582 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 17:52:19 ]
とりあえず、イテランドがあんまり一般的な言葉じゃないことはよくわかりました
内輪以外では使うのを控えることにします
ありがとうございました

583 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 02:05:31 ]
あんまりという表現なのか・・・w

584 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 02:41:16 ]
つうかどこでその言葉を習ったんだろ

585 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 15:27:41 ]
イテランドでぐぐるとこのスレが引っかかるなw

586 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 15:47:04 ]
イテランドたんのアニメ化が決定したそうです。

587 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 16:56:13 ]
とある言語の被反復構造(イテランド)

588 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 17:09:09 ]
パパ〜遊園地いきたーい
よーし家族みんなでイテランドにでもいくか〜



589 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 17:16:39 ]
井手ランド

590 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 17:32:30 ]
とある要素の列挙目録(イテレータ)

591 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 17:46:29 ]
イテランドたんの要素数は103000ですね、わかります。

592 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 18:29:32 ]
変数 X が std::list 型で変数 I がその reverse_iterator だとすると

X.erase( I.base() );

で I が示す要素の隣を消去するので I はまだ使えますよね。
VC8 で I を使うと assert で止まるんですけど。

593 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 18:55:16 ]
その1行だけ示されてもなあ。

594 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 19:24:06 ]
デバッガで追えばいいじゃん……

595 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 19:29:51 ]
string strに入っている文字列のi番目から後ろをstr2に代入するにはどうすればいいですか?

596 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 19:56:15 ]
str2 = str.substr(i);

597 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 19:57:28 ]
substr

598 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 20:06:38 ]
>>592
使えない



599 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 20:25:38 ]
595です。ありがとうございました。あとstringを==で比較するときに小文字と大文字を区別しな方法はありますか?
一度変換しないとだめでしょうか?

600 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 21:06:58 ]
stringはそもそも「大文字と小文字」っていう概念が無いと思う

601 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 21:10:43 ]
大文字だの小文字だのは真面目にやり出すと大変だぞ
ロケールの問題とか

602 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 21:19:34 ]
>>598
std::list の reverse_iterator の場合は1つ後の要素を消去したとき無効になるんですね。

603 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 21:23:31 ]
stringは複雑なんですね・・・わかりました

604 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 21:30:16 ]
複雑なのはstringではなく、真の国際化です

605 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 21:51:06 ]
"ガ"と"ガ"を==で比較してtrueにできないからstd::stringはクソ

606 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 21:54:04 ]
CLでいうところのequalpを手前で実装しろクソ

607 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 21:58:17 ]
@と`を同じ文字と解釈するべき環境とかあるからな

608 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 21:59:34 ]
7bit ASCII内での大文字小文字無視なら、char_traits自作でやる実装を何かの本で見た。



609 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 22:03:38 ]
typedef pair<double,string> HOGE;



void func(??){

HOGE p;
p.first = data;
p.second = chordname;
pairs.push_back(p);

}


int main(){
deque<HOGE> pairs;

for(){
func();
}

}



mainで作ったdequeにfunc関数で値を入れたいんですがどうしたらいいですか?
もちろんmainのスコープを抜けない限り、dequeが初期化されないようにしたいです。

610 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 22:04:09 ]
引数

611 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 22:11:52 ]
引数なのはわかるんですが・・・



void func(deque<HOGE> &pairs){

}


main(){

func(pairs);

}

こうですかね?

612 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 22:15:07 ]
>もちろんmainのスコープを抜けない限り、dequeが初期化されないようにしたいです。

むちゃくちゃだ。


613 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 22:20:12 ]
えっと具体的にどうおかしいですか?


614 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 22:22:48 ]
頭がおかしい

615 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 22:35:40 ]
mainのスコープを抜ける=プログラムが終わる

プログラムが終わった後にdequeが初期化されるって、
atexit内で初期化したいのか

616 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 23:14:48 ]
>>615
ちょっと表現を間違えました。

617 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 23:44:46 ]
えっとそれで611で大丈夫ですかね?

618 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 00:42:48 ]
private な vector<int> hoge を外部から走査して数値を得たい

const int *mage = &hoge;

のような方法でするのかな?と思ったんですが
セオリーな方法はどんな書き方なんでしょうか



619 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 00:45:27 ]
参照せずに値じゃね?

620 名前:618 mailto:sage [2008/11/23(日) 00:45:59 ]
いやいまいちお前がなにいってんのかわかんないけど






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

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

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