- 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 以降
- 902 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:31:04 ]
- 私はヘタレなのでそんなに悩んでる暇があったらイタレータ使っちゃいます
ごめんなさい
- 903 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:33:11 ]
- >>902
僕もです。
- 904 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:01:29 ]
- サイズが0のときの&v[0]は不定だ。VS2005だとアサート。
- 905 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:39:14 ]
- おかしなコード書きすぎ><
- 906 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 08:41:26 ]
- 結局STLって無いと困るけど、書き難いね。
複数ファイルイメージみたいなのをバッファに持っておきたいばあいは、 みなさんどうされてます? void*?char*? やっぱ、vector <char*>みたいな感じ?
- 907 名前:906 mailto:sage [2008/02/22(金) 08:54:20 ]
- *で宣言しちゃうと、メモリの開放を書かないと逝けないから、
vector <string>の方が良いかなぁ?
- 908 名前:906 [2008/02/22(金) 09:30:49 ]
- たまには質問にも応えて欲しいお。
- 909 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 10:05:33 ]
- >>906
テキストファイルである保証があるなら兎も角、普通はvector<string>はつかわんだろ。 つーか、ファイルの内容によって違うものを一般化されても困る。
- 910 名前:906 mailto:sage [2008/02/22(金) 10:06:37 ]
- テキストファイルじゃなくてバイナリファイルです。
TMemoryStremaみたいなのが欲しいんです。
- 911 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 10:08:23 ]
- ファイルをvector<char>に入れるとして、複数ファイルならvector<vector<char> >でいいんでね?
なにをやりたいか判ればもっと適当な方法もあるかもしれないけど。
- 912 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 10:08:31 ]
- >>906 vector<char> じゃないのか?
- 913 名前:906 mailto:sage [2008/02/22(金) 10:27:17 ]
- >vector<vector<char> >
おk。 ファイルのロードとか要りますよね。 出来上がったクラスが標準だったり、ネットに転がってて欲しい。
- 914 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 10:40:03 ]
- クラス? 何を言ってるんだ? このスレがなんだか判っているか?
STLの使い方を提示されたんだから、後は自分で勝手に実装すればいいだろ。
- 915 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 10:46:03 ]
- だって普段STL使ってる人たちが、便利な標準クラス使ってるか自作クラスライブラリそろえてるに決まってるじゃん。
- 916 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 10:55:17 ]
- もうかまうなよ。
- 917 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 11:00:59 ]
- >>913
あのさ、先日からC++BuilderのVCLを移したいみたいだけどさ STLはVCLと範疇が違うんだから、ファイルロードだのなんだのは 自分でやってくれるかな。
- 918 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 13:53:18 ]
- じゃ、せめて、
>vector<vector<char> > をカプセル化した便利なクラスだけでも教えてorz
- 919 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 13:54:32 ]
- そんなものないよ
- 920 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 13:57:18 ]
- そういえば、copiedはともかくfile_rangeくらいBoostにあってもいいのにって思う。
namespace oven = pstade::oven; std::size_t n; std::vector<std::vector<char> > v; v.reserve(n); for (std::size_t i = 0; i < n; ++i) { std::ifstream is(...); v.push_back(oven::file_range<char>(...) | oven::copied); }
- 921 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 14:00:54 ]
- どう見てもifstreamの行は消し忘れです、本当に(ry。
- 922 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 14:56:03 ]
- string::compareはありますが、大文字小文字を無視してcompareする場合は、皆さんどうされてるのでしょうか?
- 923 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 15:03:55 ]
- stricmp
- 924 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 15:06:51 ]
- 文字列まわりはSTLに期待すんな、クソだ
- 925 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 15:12:43 ]
- そーなんですか。
構造体まわりはSTLで完璧ですが。 で、文字列まわりは何使えば良いですか? ってstringしか無いじゃん。 あー、ハイパーなstringのソース落ちてないかなぁ。
- 926 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 15:17:24 ]
- 構造体てw
- 927 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 15:18:47 ]
- あ、structもclassも等価らしいですが、
何もしないデータの塊にはstruct使ってます。 変ですか?
- 928 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 15:21:17 ]
- >stricmp
試してみましたが、やっぱ、.c_str() 付けないとコンパイル通りませんね。 これくらい標準にして欲しいお。
- 929 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 15:36:00 ]
- 春だなぁ
- 930 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 15:42:26 ]
- まだ冬ですよ
- 931 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 15:57:45 ]
- これがvipクオリティ
- 932 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 16:13:44 ]
- ファイルや文字列処理は微妙にスレ違いな気もするなぁ。
boostでよければboost.string_algoに色々あるしSTLにこだわる必要はないだろ。 boost.string_algoなら>>922はboost::algorithm::ilexicographical_compare。 ところでstricmp/strcmpiって標準だっけ?
- 933 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 16:49:51 ]
- std::string って、
== で比較できましたっけ?
- 934 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 16:55:53 ]
- できる
- 935 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 17:53:15 ]
- >>932
stricmpもstrcmpiもstrcasecmpも標準Cには存在しない。 最近のPOSIXにはstrcasecmpがあるけど、locale依存なので 画面に表示する文字列をソートするくらいしか使い道がない。
- 936 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 18:08:08 ]
- >>935
なるほど。d
- 937 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 20:58:33 ]
- 一瞬、初心者歓迎スレきたのかと思ったぜw
- 938 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 00:16:23 ]
- 似たようなもんかもw
- 939 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 00:18:06 ]
- string って STL に含まれるの?
- 940 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 00:50:55 ]
- ど っ ち で も い い
強いて言うならC++標準。 つまんないことにこだわらんでも良いよ。
- 941 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 00:51:02 ]
- 頻出ネタの上に面白くない議論にしかならないのでスルー
- 942 名前:デフォルトの名無しさん [2008/02/24(日) 11:20:20 ]
- std::map<int, std::string> string_map;
assert(string_map[1].empry()); assert(string_map[100].empry()); assert(string_map.size() == 2); つまり、存在しないキーを operator[] で指定すると そのキーが自動的に挿入されて値はデフォルトコンストラクタ で作成されてしまうということですか? うむむ、例外になってくれればいいのだが。 std::vector でも operator[] は例外を出さないから それに対応した動作ということなんでしょうか?
- 943 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 11:45:26 ]
- 単に
string_map[1] = "foo"; ってやったときに存在しないキーを指定すると自動的に追加されてほしいからじゃね?
- 944 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 11:53:02 ]
- そうそう
存在するかどうかも含めて問い合わせるにはfindを使う
- 945 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 13:17:17 ]
- >>942
次の規格の改訂では、存在しないキーに対して例外を投げる at() が追加されるよ。
- 946 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 13:58:04 ]
- 統一性のある素晴らしい改訂ですな。
- 947 名前:デフォルトの名無しさん [2008/02/24(日) 14:42:27 ]
- まぁ copy_if の一軒もあるしな
- 948 名前:デフォルトの名無しさん [2008/02/24(日) 14:42:47 ]
- for_each_if とかもほしい
- 949 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 14:43:47 ]
- なんで標準にcopy_ifがないんだって話?
- 950 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 14:47:46 ]
- vector に data が追加されたり、
何で無かったんだ? って機能が色々追加されてるみたいだね。
- 951 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 14:48:12 ]
- そういえば規格の改訂で copy_if() が追加されないのはなぜなんだぜ?
- 952 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 14:54:32 ]
- 最新ドラフト(これ、最終ドラフトだっけ?)にも載ってないな。
- 953 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 14:55:44 ]
- 今公開されてる最新は n2521.pdf のはず。無いな。
- 954 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 14:57:21 ]
- 禿が10年越しの天丼ねらってる、とか?
- 955 名前:デフォルトの名無しさん [2008/02/24(日) 14:59:55 ]
- 質問失礼します。。
struct ST{ int n; }; vector<ST> v; set<ST> s; int main(){ ST x={0}; v.push_back(x); vector<ST>::iterator itv=v.begin(); itv->n++; s.insert(x); set<ST>::iterator its=s.begin(); its->n++; } のようにすると、its->n++;の行で error: increment of data-member ‘ST::n’ in read-only structure と出るのですがvectorで出来てsetで出来ないのはなぜでしょうか?
- 956 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 15:03:57 ]
- 今すぐsetのイテレータタグを調べるんだ
- 957 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 15:04:24 ]
- ごめんnの方だったのね
- 958 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 15:04:44 ]
- >>955
set は常にソートされた並びを保っている必要があるから。
- 959 名前:955 mailto:sage [2008/02/24(日) 15:17:04 ]
- >>956-958さん
iterator経由で勝手に中身を変えられたら困るということは、 setとmapだけの例外扱いなのですか? イテレータタグというのは初見なのでちょっと調べてみます。
- 960 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 15:28:50 ]
- map は second の方は変えれる。
- 961 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 15:28:54 ]
- >>959
map の場合は value_type である pair の first がソートキーなので、これは 書き換えられないように const が付いてる。 second は順序に関係ないので 書き換えてもいい。
- 962 名前:955 mailto:sage [2008/02/24(日) 15:31:13 ]
- >>960,961さん
なるほど、そうなっているのですね。 よく分かりました、どうもありがとうございました。
- 963 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 15:43:02 ]
- compareが感知しないメンバなら、mutable付けていじることはできるけどね。
- 964 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 16:01:24 ]
- まぁそれは奥の手ということでw
- 965 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 14:04:12 ]
- ファイルに簡単に新規作成、追記ができる方法ありますか?
ofstreamって、bad()とかfail()とか使いにくい。
- 966 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 14:18:47 ]
- ofstream.exceptions(badbit | failbit);
ってやっとけばいちいちチェックしなくても例外吐いてくれると思う それが使いやすいかどうかはわからんが…
- 967 名前:965 mailto:sage [2008/02/25(月) 14:25:43 ]
- サンクス>>966
- 968 名前:デフォルトの名無しさん [2008/02/25(月) 16:54:00 ]
- そんな機能があったとは
- 969 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 17:08:09 ]
- そういえばostreamのfail()が真になる事ってあるの?
- 970 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 17:24:02 ]
- >>920
>file_range ずっと見てても分からないんですが、file_rangeって何ですか?
- 971 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 17:29:12 ]
- ファイルの先頭から末尾の一つ後ろまでを指すイテレータのペアみたいなもん
- 972 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 17:30:41 ]
- 使い方キボン
- 973 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 18:12:11 ]
- 複数のファイルがあって、それがローデータだったり、テーブルデータだったりします。
複数のファイルを混在させずに簡単にロードしてしまうクラスが欲しいのですが、どんな実装になりますか?
- 974 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 18:13:10 ]
- >>972
コンストラクタで開いたら後はただのRange。 p-stade.svn.sourceforge.net/viewvc/p-stade/trunk/pstade/libs/oven/test/file_range.cpp?revision=1481&view=markup p-stade.sourceforge.net/oven/doc/html/oven/ranges.html#oven.ranges.file_range Range自体はここでも見て。 www.kmonos.net/alang/boost/classes/range.html
- 975 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 18:16:01 ]
- さんks>>974
boostなんですね。STLに昇格するまで待ってようかなぁ。 ちょっと気後れしてしまうorz
- 976 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 08:54:04 ]
- 973もヨロ!
- 977 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 08:59:15 ]
- >>973
ローデータ、テーブルデータ、ファイルを混在、簡単に、ロード これだけ曖昧な言葉を並んでるとさすがに意味がわからん。
- 978 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 11:28:42 ]
- いや、だからメモリにロードしたいけど、
ファイルの種類が増えるたび書き換えするのは面倒なので、 ポケットみたいにどんどんファイル(ファイル名)を入れていくとその中でメモリになってる、みたいな。
- 979 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 12:01:54 ]
- >>978
// ちょっとエスパーにチャレンジしてみたい気分になった // こうですか? #include <vector> #include <map> #include <string> #include <istream> #include <iterator> #include <fstream> #include <cstddef> #include <exception> #include <iostream> typedef std::vector<char> memory_type; class pocket { std::map<std::string, memory_type> naka; public: void ireru(std::string const& filename) { std::ifstream file(filename.c_str()); file.exceptions(std::ios::badbit | std::ios::failbit); naka[filename].assign(std::istreambuf_iterator<char>(file) , std::istreambuf_iterator<char>()); } }; int main(int argc, char* argv[]) { try { pocket pocket; for (int i = 1; i < argc; ++i) { pocket.ireru(argv[i]); } return EXIT_SUCCESS; } catch (std::exception const& e) { std::cerr << e.what() << std::endl; return EXIT_FAILURE; } }
- 980 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 12:18:03 ]
- 乞食は消えろ
- 981 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 12:25:50 ]
- さて埋めるか。
- 982 名前:978 mailto:sage [2008/02/26(火) 12:58:13 ]
- サンks>>979
そのまま使ってみます。 でも、ireruメソッドはメソッド名変えるけど。 class pocketもclass memoryPocketの方が良いかなぁ?
- 983 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 14:12:22 ]
- 978がアホすぎて吹いた
- 984 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 14:15:27 ]
- 吹いても良いから、自分はどーゆーふーに作ってるか書けお。
- 985 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 14:24:08 ]
- スレタイに「初心者」か「宿題」が付いてるスレへ行ってくれ。
マジで邪魔。
- 986 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 14:29:55 ]
- >985
おま、ふよー
- 987 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 15:16:46 ]
- >>985
おまえだって大したことはないだろ
- 988 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 16:42:30 ]
- 次スレマダー?
- 989 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 18:44:25 ]
- 邪魔っていうか、ゴミだよね。
なんでこのスレ見てるんだろう。
- 990 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 19:03:06 ]
- リアルで同じ事言われてここに辿り着いたんだろう
- 991 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 20:47:50 ]
- ジエンオツ
- 992 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 21:41:38 ]
- ということにしておこうか:-)
- 993 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:55:52 ]
- 次スレ
pc11.2ch.net/test/read.cgi/tech/1200044614/
- 994 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:16:16 ]
- あれ?あ、そういうこと・・・
- 995 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:17:38 ]
- STLスレはいらんという事?
- 996 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:25:47 ]
- まぁ毎度のことだな。
こっちが二ヶ月で 1000 。 あっちが一月半で 800 。 あわせると、だいたい一月でちょうど 1000 か。
- 997 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 02:03:52 ]
- 【C++】STL(Standard Template Library)相談室 9
pc11.2ch.net/test/read.cgi/tech/1204045410/
- 998 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 02:04:35 ]
- 【C++】STL(Standard Template Library)相談室 7
pc11.2ch.net/test/read.cgi/tech/1185986999/ 【C++】STL(Standard Template Library)相談室 6 pc11.2ch.net/test/read.cgi/tech/1160821240/ 【C++】STL(Standard Template Library)相談室 5 pc8.2ch.net/test/read.cgi/tech/1143608073/ 【C++】STL(Standard Template Library)相談室 ;4 pc8.2ch.net/test/read.cgi/tech/1130680264/ 【C++】STL(Standard Template Library)相談室 3 pc8.2ch.net/test/read.cgi/tech/1116559700/ 【C++】STL(Standard Template Library)相談室 2 pc8.2ch.net/test/read.cgi/tech/1104898734/ 【C++】STL(Standard Template Library)相談室 pc5.2ch.net/test/read.cgi/tech/1095583235/
- 999 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 02:07:03 ]
- 新スレからの誤爆とは珍しい。
- 1000 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 02:08:40 ]
- 次すれ
pc11.2ch.net/test/read.cgi/tech/1204045410/
- 1001 名前:1001 [Over 1000 Thread]
- このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
|

|