STL全般について意見を交換し合うためのスレです。
STLを用いたテクニックや不満などSTLに関わることなら何でもおkです。
STLって便利ですよね。かなりソースも短くなるし。
(でも横長になると言う難点も・・・
皆さんはSTLでどういった時にどのように使いますか?
実際のコードとか張ってSTLのテクニック等について語りましょう。
ifstream ifs("input.txt");
cout << accumulate(istream_iterator<int>(ifs), istream_iterator<int>(), 0) << endl;
input.txtのスペース区切り数値の総和を出力します。
これだけでテキストエディタの右端越えちゃいますw
これだけでテキストエディタ越えるって、解像度めっさ低いんやろか(´∀`)?
エディタは縦長に使っているので横に広くは使ってないです(´・∀・`)
え、縦長のディスプレイなんですか?珍しいですね(´∀`)
一応私のPCのディスプレイはこれですよ。
http://www.eizo.com.cn/eizo/press/pi/images/FlexScanL795.jpg
これはこれでネットサーフィンするときとか便利です。
確かに縦長でネットサーフィンに向いてそうですねw
僕のは縦横比1:4ぐらいでかなり横長なんで全然なんですよ(;∀;)
http://www.faith-go.co.jp/org_pc/passant_dt_image_2.jpg
こんな感じですか?
すごいですね、私は株には疎いもので。
株もプログラムでほぼ予想できますよ?
ほっとくだけでどんどんお金が増えるんですw
多いときは一時間もあれば資金が一気に1.4倍ぐらいに(´∀`)
>2
STL一度使うと、STL無しで組めなくなりますよねw
>ifstream ifs("input.txt");
>cout << accumulate(istream_iterator<int>(ifs), istream_iterator<int>(), 0) << endl;
これは必須と言っても良いテクニックですよねw
STLは確かに便利なんですが、どうにもやっぱりSTL単品じゃ不足している部分もありますよね;;
例えば、
vector< pair<int, int> > data;
のデータをsecondの値をキーとしてソートしたいときだとか…
こういう場合、大抵boostなどのライブラリを利用して解決するのですが、これをSTLだけで上手く実装する方法とかないものでしょうか?
それはすごいですね、多いときで1.4倍ですか、どのくらい凄いのか私には良く分かりませんが結果お金が増えているのなら羨ましい限りですw
http://www.kaburobo.jp/
こういう大会があるようなので是非出てみては如何でしょうか?
確かそのコンテスト、規格の問題で無理なんですよー(;∀;)
っていうか11の一行目、長いですねw 開業した方が読みやすいですよw
東田さんのPCじゃ右端越えちゃうんじゃないですか?w(´∀`)
>vector< pair<int, int> > data;
>のデータをsecondの値をキーとしてソートしたいときだとか…
そういうときよくありますよねw
http://www.wakhok.ac.jp/~sumi/stl/header/functional.html#select
SGI STLには標準で含まれているようですが、私の環境では使えません。
boostは便利らしいと聞いたことはありますが使ったことはありません。
やっぱりboostは必須でしょうか。
>確かそのコンテスト、規格の問題で無理なんですよー(;∀;)
そうでしたか、それは残念ですね。
>東田さんのPCじゃ右端越えちゃうんじゃないですか?w(´∀`)
逆に私の環境では横幅が狭いので自動で適度に改行されて特に読みにくいということはありませんw
でも改行したほうが読みやすいですね。
確かに改行は重要です。
でも改行ばかりもどうかと思いますよ?
例えばこんなふうに、
句読点とかのたびに
改行したりして
縦長になると
読みにくいですよね。
あれ?でもそう考えると東田さんのディスプレイってネットサーフィンに向いてないんじゃ……?(´∀`)?
>13
boostは必須だと思いますよーw
SGI-STLは名前だけは一応知っているんですが、実際使ったことはないです;;
動作環境が合うようでしたら今度また入れてみようと思います。
>14
スレ違いですよ
>でもそう考えると東田さんのディスプレイってネットサーフィンに向いてないんじゃ……?(´∀`)?
そうでもないですよ、サーフィン自体は縦にページ全体を一望できるので見やすいですよ。
長くても短くても読みにくいです、適度な改行が一番読みやすいです。
SGI-STLは環境依存性が高いので、特に今更入れる必要はないと思います。
それに、boostを使ってるのならSGI-STLを入れる必要もないですし。
SGI-STLで出来ることは全部boostで出来ますよ。
>スレ違い
ここからSTLの話になっていくんです。ご安心を(´∀`)
適度、というのはどのくらいでしょうか?
考えてみると曖昧ですよね。
それをきっちり文字数で決めたとしてもいちいち数えてられませんもんねw
そ こ で S T L で す よ !(´∀`)
>適度、というのはどのくらいでしょうか?
>考えてみると曖昧ですよね。
>それをきっちり文字数で決めたとしてもいちいち数えてられませんもんねw
> そ こ で S T L で す よ !(´∀`)
意味がわかりません。
>SGI-STLは環境依存性が高いので、特に今更入れる必要はないと思います。
>それに、boostを使ってるのならSGI-STLを入れる必要もないですし。
>SGI-STLで出来ることは全部boostで出来ますよ。
環境依存性が高いと言ってもboostも同じように標準ではありませんし、内部構造としても複雑でコンパイル時間が非常に長いと聞きます。
それとboostはインストールが難しいです。
> そ こ で S T L で す よ !(´∀`)
ハァ(゚Д゚)
STLで文章解読プログラム作ってみては?
それじゃ、ちょっとSTLでプログラミングしに出かけてきます(´∀`)ノシ
miso
miso
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
ありがとうございました!
てすと
舟橋市中山