STL全般について意見を交換し合うためのスレです。
STLを用いたテクニックや不満などSTLに関わることなら何でもおkです。
miso
お邪魔します(^_^)
我未だSTLを知らず、焉んぞboostを知らんや。
>>20
> それとboostはインストールが難しいです。
ストリームを除けば、アーカイブを解凍してパスを通すだけじゃありませんでしたっけ。
私はC++のストリームは好きではないので頑固に避けてます:p
STL知らなくてもboost知ることできるけどねw(´∀`)
boostでたしかにインストールが面倒なものはpython,regex,thread,serializationとか。
ほとんどはパス通せばOK
といっても、boost使ってるのにregexにserialization使えないってアホだけど
C++0xはいつ出るんだろう
regexは重要、必須。
TR1はいつ出るんだろう
改めてBoost読んでた
もう俺には無理。
MDC++Dぐらいは理解できるんだけど、作る側に絶対回れないとかおもた
boost凄杉
とりあえず使い方を重点的に覚えようと思う。
いくらboostやstdが好きだからって…
↓ここまで乱用してしまうのはやっぱダメですよねww
std::for_each(m_AddTaskList.begin(), m_AddTaskList.end(), boost::bind(boost::mem_fn<TaskList::iterator>(&TaskList::insert), &m_TaskList, boost::bind(std::lower_bound<TaskList::iterator, boost::shared_ptr<TaskBase>, PriorityCompare>, boost::bind(boost::mem_fn(&TaskList::begin), &m_TaskList), boost::bind(boost::mem_fn(&TaskList::end), &m_TaskList), _1, PriorityCompare()), _1));
展開して書くと、
for(AddTaskList::iterator iter=m_AddTaskList.begin(); iter!=m_AddTaskList.end(); iter++)
{
m_TaskList.insert(std::lower_bound(m_TaskList.begin(), m_TaskList.end(), *iter, PriorityCompare()), *iter);
}
って、普通にかけるんですけどねw
テスト
一つ質問です。
std::vector は、内部的なメモリ領域が連続している事を保証してるみたいですな。
そのおかげで「時々」メモリの再確保→全内容コピーが発生して、
仕組を知らないと痛い目に遭うわけですが。
ちなみに私も痛い目にあいました☆
std::dequeue はその辺どうなんでしょう。
ランダムアクセスはしなくて、push_back()とイテレータを回すくらいしかやらなくて、
イテレータを回すとpush_back()の順番で要素にアクセスしたくて、
という状況下において実行コストの安いものを知りたいのです。
dequeueはどうもよくわからなくて…
vectorにしても上述の「時々コスト発生」をコストとして数えていない解説ばかりで。
std::listでいいのでは?
STLて何ですか?
C++から作ったプログラム言語ってことですか?
ほかのプログラムに比べてどういった利点があるのか
教えていただければうれしいです
>>33
遅レスすまんせん。
多分、std関連の具体的な実装はベンダ依存です。多分・・
「vectorはメモリ領域が連続してることを保障する」
というものとかは見ますが、
std::stringなんかの実装はMSでは相当いろいろやってます。
std::dequは末端要素の追加/削除は定数時間という規定が(一応)あるので、dequeでOKなのではないでしょうか。
僕はstd::listが好きです!
>>34
ありがとうございます。
std::list はちょ〜っと重い気がしまして。
イマドキのマシンパワーでは気にするほどでもないのはわかってるんですけど…
>>36
こちらこそ遅レスすんまそん。
具体的な実装はベンダ依存ですけど、
アクセスのコストは仕様で決まってますよね。
std::vector のpush_back()に関する「時々 O(N)」に触れてる文書が
見当たらないのが不思議なんです。
実装上の問題として時々全コピーと解説してる所はありましたが、
なぜか仕様として時々O(N)とは書いてない。
ぶっちゃけ仕様違反とも取れる挙動と思うんですけど…
仕様の原文(英語)なんか読む気にならないし(-_-;)
と言うわけで「末端要素の追加・削除は定数時間」という仕様を信じきれないのです。
ホントに毎回例外無く必ず定数時間?
ふと気が付くと std::vector と std::map 以外は使った事が無い私(^_^;)
あ、std::set と std::min と std::max は一度だけ使いました:p
>>35
STLとはC++の上で使う為のライブラリです。
配列とかリストとかのデータ保持構造(およびそれを利用した各種アクセス)をまとめたものです。
通常、他の言語では言語仕様の一部として提供されるか、
まるっきり無視して全く提供されないか、
そんなような内容です。
#include <stdio.h>
int main(void)
{
char str[10];
//scanf("%s",str);
gets(str);
printf("%s\\n",str);
return 0;
}
これはscanfとgetsのいずれかで文字列入力しているプログラムですが、
↑のようにgetsで入力した場合、半角文字も入力できますが、
scanfの場合、半角文字は文字列の区切りとして判定されてしまい、
それ以降の文字列は入力不可です。
このプログラムはCの内容ですが、これをC++書くとしたら、
どういったソースになるのでしょう?
#include <iostream>
using namespace std;
int main(void)
{
char str[10];
cin >> str;
cout << str << endl;
return 0;
}
この場合だと、半角文字を区切りとして判定されてしまいます。
お願いします。
http://nun.nu/www.geocities.jp/ky_webid/cpp/library/029.html
の最後のあたりかな。
>>40
ありがとうございました!
てすと
舟橋市中山