【C++】STL(Standard ..
[2ch|▼Menu]
892:デフォルトの名無しさん
08/02/21 16:29:38
>>886
なんで?

893:デフォルトの名無しさん
08/02/21 16:36:28
>>889
a.begin() + n は dereferenceable ではないので
これを dereference した時点で規格としては undefined behavior,
でよいのでは?

894:デフォルトの名無しさん
08/02/21 16:48:51
std::string に trim が無いなんて不自由でつね。

895:デフォルトの名無しさん
08/02/21 16:51:25
まぁ、色々足りないものはある。

896:デフォルトの名無しさん
08/02/21 17:25:46
>>888
No

アドレス演算子&はオペランドが[ ]演算子の結果の場合、単項&演算子と
[ ]演算子が暗黙に意味する単項*演算子は評価されず、&演算子を削除し
[ ]演算子を+演算子に変更した場合と同じ結果となる。

つまり、&v[v.size()] は v + v.size() に評価されるのであって、
&(*(v + v.size)) とは評価されない。

897:デフォルトの名無しさん
08/02/21 17:27:38
>>888
C言語もあまり詳しくないだろ?K&Rにも、>>885が正しいことは書いてある。
かつ、C++でも同じ。

898:デフォルトの名無しさん
08/02/21 17:44:24
>>896
それはポインタについてじゃないのか
>>889も言ってるが、vectorの[]や、vectorのイテレータの+と*は単なる関数かもしれない訳で、
ポインタについての規定がそのままあてはまるとする理由はないだろ

899:デフォルトの名無しさん
08/02/21 18:01:34
stringの数字チェックはできますか?

900:デフォルトの名無しさん
08/02/21 18:47:36
>>898
そのとおりだ。ポインタの話しと思ってた。

901:デフォルトの名無しさん
08/02/21 18:52:15
&v[0] + v.size()でOK

902:デフォルトの名無しさん
08/02/21 22:31:04
私はヘタレなのでそんなに悩んでる暇があったらイタレータ使っちゃいます
ごめんなさい

903:デフォルトの名無しさん
08/02/21 22:33:11
>>902
僕もです。

904:デフォルトの名無しさん
08/02/21 23:01:29
サイズが0のときの&v[0]は不定だ。VS2005だとアサート。

905:デフォルトの名無しさん
08/02/22 00:39:14
おかしなコード書きすぎ><

906:デフォルトの名無しさん
08/02/22 08:41:26
結局STLって無いと困るけど、書き難いね。

複数ファイルイメージみたいなのをバッファに持っておきたいばあいは、
みなさんどうされてます?
void*?char*?


やっぱ、vector <char*>みたいな感じ?

907:906
08/02/22 08:54:20
*で宣言しちゃうと、メモリの開放を書かないと逝けないから、
vector <string>の方が良いかなぁ?

908:906
08/02/22 09:30:49
たまには質問にも応えて欲しいお。

909:デフォルトの名無しさん
08/02/22 10:05:33
>>906
テキストファイルである保証があるなら兎も角、普通はvector<string>はつかわんだろ。
つーか、ファイルの内容によって違うものを一般化されても困る。

910:906
08/02/22 10:06:37
テキストファイルじゃなくてバイナリファイルです。

TMemoryStremaみたいなのが欲しいんです。

911:デフォルトの名無しさん
08/02/22 10:08:23
ファイルをvector<char>に入れるとして、複数ファイルならvector<vector<char> >でいいんでね?
なにをやりたいか判ればもっと適当な方法もあるかもしれないけど。

912:デフォルトの名無しさん
08/02/22 10:08:31
>>906 vector<char> じゃないのか?

913:906
08/02/22 10:27:17
>vector<vector<char> >

おk。
ファイルのロードとか要りますよね。
出来上がったクラスが標準だったり、ネットに転がってて欲しい。

914:デフォルトの名無しさん
08/02/22 10:40:03
クラス? 何を言ってるんだ? このスレがなんだか判っているか?
STLの使い方を提示されたんだから、後は自分で勝手に実装すればいいだろ。

915:デフォルトの名無しさん
08/02/22 10:46:03
だって普段STL使ってる人たちが、便利な標準クラス使ってるか自作クラスライブラリそろえてるに決まってるじゃん。

916:デフォルトの名無しさん
08/02/22 10:55:17
もうかまうなよ。

917:デフォルトの名無しさん
08/02/22 11:00:59
>>913
あのさ、先日からC++BuilderのVCLを移したいみたいだけどさ
STLはVCLと範疇が違うんだから、ファイルロードだのなんだのは
自分でやってくれるかな。

918:デフォルトの名無しさん
08/02/22 13:53:18
じゃ、せめて、

>vector<vector<char> >

をカプセル化した便利なクラスだけでも教えてorz

919:デフォルトの名無しさん
08/02/22 13:54:32
そんなものないよ

920:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/22 14:00:54
どう見てもifstreamの行は消し忘れです、本当に(ry。

922:デフォルトの名無しさん
08/02/22 14:56:03
string::compareはありますが、大文字小文字を無視してcompareする場合は、皆さんどうされてるのでしょうか?


923:デフォルトの名無しさん
08/02/22 15:03:55
stricmp

924:デフォルトの名無しさん
08/02/22 15:06:51
文字列まわりはSTLに期待すんな、クソだ

925:デフォルトの名無しさん
08/02/22 15:12:43
そーなんですか。

構造体まわりはSTLで完璧ですが。

で、文字列まわりは何使えば良いですか?
ってstringしか無いじゃん。
あー、ハイパーなstringのソース落ちてないかなぁ。

926:デフォルトの名無しさん
08/02/22 15:17:24
構造体てw

927:デフォルトの名無しさん
08/02/22 15:18:47
あ、structもclassも等価らしいですが、
何もしないデータの塊にはstruct使ってます。

変ですか?

928:デフォルトの名無しさん
08/02/22 15:21:17
>stricmp

試してみましたが、やっぱ、.c_str() 付けないとコンパイル通りませんね。
これくらい標準にして欲しいお。

929:デフォルトの名無しさん
08/02/22 15:36:00
春だなぁ

930:デフォルトの名無しさん
08/02/22 15:42:26
まだ冬ですよ

931:デフォルトの名無しさん
08/02/22 15:57:45
これがvipクオリティ

932:デフォルトの名無しさん
08/02/22 16:13:44
ファイルや文字列処理は微妙にスレ違いな気もするなぁ。
boostでよければboost.string_algoに色々あるしSTLにこだわる必要はないだろ。
boost.string_algoなら>>922はboost::algorithm::ilexicographical_compare。

ところでstricmp/strcmpiって標準だっけ?

933:デフォルトの名無しさん
08/02/22 16:49:51
std::string って、
==
で比較できましたっけ?

934:デフォルトの名無しさん
08/02/22 16:55:53
できる

935:デフォルトの名無しさん
08/02/22 17:53:15
>>932
stricmpもstrcmpiもstrcasecmpも標準Cには存在しない。
最近のPOSIXにはstrcasecmpがあるけど、locale依存なので
画面に表示する文字列をソートするくらいしか使い道がない。

936:デフォルトの名無しさん
08/02/22 18:08:08
>>935
なるほど。d

937:デフォルトの名無しさん
08/02/22 20:58:33
一瞬、初心者歓迎スレきたのかと思ったぜw

938:デフォルトの名無しさん
08/02/23 00:16:23
似たようなもんかもw

939:デフォルトの名無しさん
08/02/23 00:18:06
string って STL に含まれるの?

940:デフォルトの名無しさん
08/02/23 00:50:55
ど  っ  ち  で  も  い  い

強いて言うならC++標準。
つまんないことにこだわらんでも良いよ。

941:デフォルトの名無しさん
08/02/23 00:51:02
頻出ネタの上に面白くない議論にしかならないのでスルー

942:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/24 11:45:26
単に
string_map[1] = "foo";
ってやったときに存在しないキーを指定すると自動的に追加されてほしいからじゃね?

944:デフォルトの名無しさん
08/02/24 11:53:02
そうそう
存在するかどうかも含めて問い合わせるにはfindを使う

945:デフォルトの名無しさん
08/02/24 13:17:17
>>942
次の規格の改訂では、存在しないキーに対して例外を投げる at() が追加されるよ。

946:デフォルトの名無しさん
08/02/24 13:58:04
統一性のある素晴らしい改訂ですな。

947:デフォルトの名無しさん
08/02/24 14:42:27
まぁ copy_if の一軒もあるしな

948:デフォルトの名無しさん
08/02/24 14:42:47
for_each_if とかもほしい

949:デフォルトの名無しさん
08/02/24 14:43:47
なんで標準にcopy_ifがないんだって話?

950:デフォルトの名無しさん
08/02/24 14:47:46
vector に data が追加されたり、
何で無かったんだ? って機能が色々追加されてるみたいだね。

951:デフォルトの名無しさん
08/02/24 14:48:12
そういえば規格の改訂で copy_if() が追加されないのはなぜなんだぜ?

952:デフォルトの名無しさん
08/02/24 14:54:32
最新ドラフト(これ、最終ドラフトだっけ?)にも載ってないな。

953:デフォルトの名無しさん
08/02/24 14:55:44
今公開されてる最新は n2521.pdf のはず。無いな。

954:デフォルトの名無しさん
08/02/24 14:57:21
禿が10年越しの天丼ねらってる、とか?

955:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/24 15:03:57
今すぐsetのイテレータタグを調べるんだ


957:デフォルトの名無しさん
08/02/24 15:04:24
ごめんnの方だったのね

958:デフォルトの名無しさん
08/02/24 15:04:44
>>955
set は常にソートされた並びを保っている必要があるから。

959:955
08/02/24 15:17:04
>>956-958さん
iterator経由で勝手に中身を変えられたら困るということは、
setとmapだけの例外扱いなのですか?
イテレータタグというのは初見なのでちょっと調べてみます。

960:デフォルトの名無しさん
08/02/24 15:28:50
map は second の方は変えれる。

961:デフォルトの名無しさん
08/02/24 15:28:54
>>959
map の場合は value_type である pair の first がソートキーなので、これは
書き換えられないように const が付いてる。 second は順序に関係ないので
書き換えてもいい。

962:955
08/02/24 15:31:13
>>960,961さん
なるほど、そうなっているのですね。
よく分かりました、どうもありがとうございました。

963:デフォルトの名無しさん
08/02/24 15:43:02
compareが感知しないメンバなら、mutable付けていじることはできるけどね。

964:デフォルトの名無しさん
08/02/24 16:01:24
まぁそれは奥の手ということでw

965:デフォルトの名無しさん
08/02/25 14:04:12
ファイルに簡単に新規作成、追記ができる方法ありますか?

ofstreamって、bad()とかfail()とか使いにくい。

966:デフォルトの名無しさん
08/02/25 14:18:47
ofstream.exceptions(badbit | failbit);
ってやっとけばいちいちチェックしなくても例外吐いてくれると思う
それが使いやすいかどうかはわからんが…

967:965
08/02/25 14:25:43
サンクス>>966

968:デフォルトの名無しさん
08/02/25 16:54:00
そんな機能があったとは

969:デフォルトの名無しさん
08/02/25 17:08:09
そういえばostreamのfail()が真になる事ってあるの?

970:デフォルトの名無しさん
08/02/25 17:24:02
>>920
>file_range

ずっと見てても分からないんですが、file_rangeって何ですか?

971:デフォルトの名無しさん
08/02/25 17:29:12
ファイルの先頭から末尾の一つ後ろまでを指すイテレータのペアみたいなもん

972:デフォルトの名無しさん
08/02/25 17:30:41
使い方キボン

973:デフォルトの名無しさん
08/02/25 18:12:11
複数のファイルがあって、それがローデータだったり、テーブルデータだったりします。

複数のファイルを混在させずに簡単にロードしてしまうクラスが欲しいのですが、どんな実装になりますか?

974:デフォルトの名無しさん
08/02/25 18:13:10
>>972
コンストラクタで開いたら後はただのRange。
URLリンク(p-stade.svn.sourceforge.net)
URLリンク(p-stade.sourceforge.net)

Range自体はここでも見て。
URLリンク(www.kmonos.net)

975:デフォルトの名無しさん
08/02/25 18:16:01
さんks>>974

boostなんですね。STLに昇格するまで待ってようかなぁ。
ちょっと気後れしてしまうorz


976:デフォルトの名無しさん
08/02/26 08:54:04
973もヨロ!

977:デフォルトの名無しさん
08/02/26 08:59:15
>>973
ローデータ、テーブルデータ、ファイルを混在、簡単に、ロード
これだけ曖昧な言葉を並んでるとさすがに意味がわからん。

978:デフォルトの名無しさん
08/02/26 11:28:42
いや、だからメモリにロードしたいけど、
ファイルの種類が増えるたび書き換えするのは面倒なので、
ポケットみたいにどんどんファイル(ファイル名)を入れていくとその中でメモリになってる、みたいな。

979:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/26 12:18:03
乞食は消えろ

981:デフォルトの名無しさん
08/02/26 12:25:50
さて埋めるか。

982:978
08/02/26 12:58:13
サンks>>979

そのまま使ってみます。
でも、ireruメソッドはメソッド名変えるけど。

class pocketもclass memoryPocketの方が良いかなぁ?


983:デフォルトの名無しさん
08/02/26 14:12:22
978がアホすぎて吹いた

984:デフォルトの名無しさん
08/02/26 14:15:27
吹いても良いから、自分はどーゆーふーに作ってるか書けお。

985:デフォルトの名無しさん
08/02/26 14:24:08
スレタイに「初心者」か「宿題」が付いてるスレへ行ってくれ。
マジで邪魔。

986:デフォルトの名無しさん
08/02/26 14:29:55
>985
おま、ふよー

987:デフォルトの名無しさん
08/02/26 15:16:46
>>985
おまえだって大したことはないだろ

988:デフォルトの名無しさん
08/02/26 16:42:30
次スレマダー?

989:デフォルトの名無しさん
08/02/26 18:44:25
邪魔っていうか、ゴミだよね。
なんでこのスレ見てるんだろう。

990:デフォルトの名無しさん
08/02/26 19:03:06
リアルで同じ事言われてここに辿り着いたんだろう

991:デフォルトの名無しさん
08/02/26 20:47:50
ジエンオツ

992:デフォルトの名無しさん
08/02/26 21:41:38
ということにしておこうか:-)

993:デフォルトの名無しさん
08/02/26 23:55:52
次スレ
スレリンク(tech板)

994:デフォルトの名無しさん
08/02/27 01:16:16
あれ?あ、そういうこと・・・

995:デフォルトの名無しさん
08/02/27 01:17:38
STLスレはいらんという事?

996:デフォルトの名無しさん
08/02/27 01:25:47
まぁ毎度のことだな。
こっちが二ヶ月で 1000 。
あっちが一月半で 800 。
あわせると、だいたい一月でちょうど 1000 か。

997:デフォルトの名無しさん
08/02/27 02:03:52
【C++】STL(Standard Template Library)相談室 9
スレリンク(tech板)

998:デフォルトの名無しさん
08/02/27 02:04:35
【C++】STL(Standard Template Library)相談室 7
スレリンク(tech板)
【C++】STL(Standard Template Library)相談室 6
スレリンク(tech板)
【C++】STL(Standard Template Library)相談室 5
スレリンク(tech板)
【C++】STL(Standard Template Library)相談室 ;4
スレリンク(tech板)
【C++】STL(Standard Template Library)相談室 3
スレリンク(tech板)
【C++】STL(Standard Template Library)相談室 2
スレリンク(tech板)
【C++】STL(Standard Template Library)相談室
スレリンク(tech板)

999:デフォルトの名無しさん
08/02/27 02:07:03
新スレからの誤爆とは珍しい。

1000:デフォルトの名無しさん
08/02/27 02:08:40
次すれ
スレリンク(tech板)

1001:1001
Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4824日前に更新/208 KB
担当:undef