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


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

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



1 名前:デフォルトの名無しさん [2008/02/27(水) 02:03:30 ]
C++標準ライブラリの一つ、STLについて。

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

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

2 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 02:05:01 ]
【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/

3 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 02:05:31 ]
入門ページなど

・入門
www.jah.ne.jp/~naoyuki/Writings/STL.html
・入門,一覧,使い方
www5c.biglobe.ne.jp/~ecb/cpp/07_01.html
・メソッド一覧
www.wakhok.ac.jp/~sumi/stl/
・サンプルプログラム集
www.s34.co.jp/cpptechdoc/reference/stl_samples/
・TIPS集
www.nantekotta.com/stl.html
・メルマガ
www.kab-studio.biz/Programing/STLiostream/
・解説
ja.wikipedia.org/wiki/Standard_Template_Library
www-ise2.ise.eng.osaka-u.ac.jp/~iwanaga/programming/stl/about_stl.html

マルチスレッドプログラミングの時には
www.logos.ic.i.u-tokyo.ac.jp/~yokoyama/trash/stl_thread.html

STLPort
www.sgi.com/tech/stl/
www.stlport.org/

4 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 02:05:53 ]
書籍紹介


STL標準講座―標準テンプレートライブラリを利用したC++プログラミング
www.amazon.co.jp/gp/product/4881357786/

STL―標準テンプレートライブラリによるC++プログラミング 第2版
www.amazon.co.jp/gp/product/4894714329/

標準C++:STLの基礎知識
www.amazon.co.jp/gp/product/4756138047/

標準講座C++―基礎からSTLを利用したプログラミングまで
www.amazon.co.jp/gp/product/4881357050/

STLによるコンポーネントデザイン
www.amazon.co.jp/gp/product/475613422X/

Effective STL―STLを効果的に使いこなす50の鉄則
www.amazon.co.jp/gp/product/4894714108/


5 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 02:07:07 ]
関連スレ

C++相談室 part60
pc11.2ch.net/test/read.cgi/tech/1200044614/

Boostを語れゴラァ part5
pc11.2ch.net/test/read.cgi/tech/1192662575/

C++0x 2
pc11.2ch.net/test/read.cgi/tech/1191842951/

C++0x Part2
pc11.2ch.net/test/read.cgi/tech/1191754720/

6 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 02:07:36 ]
template class< >>1 >乙

7 名前:デフォルトの名無しさん [2008/02/27(水) 09:50:04 ]
てすと

8 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 10:31:03 ]
#include ">>6"
乙< >>1 > >>1乙;

9 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:04:36 ]
C++0xでは

typedef vector<int>::const_iterator CIT;

for(CIT i = v.begin(); i != v.end(); ++i) {
//...............
}

こんなことしなくて良いなんてよぉ〜

for(auto i = v.begin(); i != v.end(); ++i) {
//...............
}

素晴らしいじゃんかよぉ〜 禿考えたのぉ〜

10 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:39:20 ]
template <typename T> typedef std::vector<T>::iterator auto;
for (auto<int> i = v.begin(); i < v.end(); ++i)

autoの癖にint宣言が必要だから駄目か
という以前に(ry



11 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:30:39 ]
for (auto i: v)
にはならないのか

12 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:34:30 ]
Dだとforeach(i; v)でいけるのを考えると、どうも見劣りがする

13 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 20:29:12 ]
>>11
今は頑張ってもBOOST_FOREACH(i, v);か



14 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:13:19 ]
禿はよく頑張ってるよ。うん。
この調子でどんどん奇怪な言語に仕上げてくれ。

15 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:20:53 ]
SchemeやりはじめてからC++が糞に見えてきた。まさにやっつけ言語。

16 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:23:48 ]
www.research.att.com/~bs/

17 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:35:09 ]
SchemeはC++で実装されてるんですよ

18 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:37:25 ]
あれ?C++0xではさらにこうなるんじゃなかたっけ?
std::vector<int> vec = { 1, 2, 3 };
for ( auto i; vec ) {
    std::cout << i << std::endl;
}

19 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:42:06 ]
まだドラフトには入ってないけど
検討されてはいたはず。

20 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:58:43 ]
perlから帰ってくると

for i ( 10, 15, 23, 8, 6 ) {
 cout << i << endl;
}

みたいなことを凄くやりたくなる



21 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:19:46 ]
>>17
C++コンパイラはLispで実装されてるんですよ

22 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:22:26 ]
LispはSchemeで実装されてるんですよ

23 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:27:40 ]
www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2394.html
www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2385.pdf

によれば

for ( auto i.; { 10, 15, 23, 8, 6 } ) {
  cout << i << endl;
}
はできるような気がする。

24 名前:20 mailto:sage [2008/02/28(木) 00:24:53 ]
       ,..-──- 、
     /. : : : : : : : : :: \
    /.: : : : : : : : : : : : : : ヽ
   ,!::: : : : : :,-…-…-ミ: : :', マジかよ
   {:: : : : :: : :i '⌒' '⌒'i: : :}
   {:: : : : : : |   ェェ ェェ | : :}      ∩___∩
   { : : : : : :|    ,.、  |: :;!     /  >>23   ヽ
__ヾ: : : :: :i  r‐-ニ-┐| :ノ     | ●   ●   |
    ゞ : :イ! ヽ 二゙ノイ‐′     | ( _●_)     ミ
        ` ー一'´ヽ \  ,,-''"彡 |∪| __/`''--、
  )     |@      |ヽ/     ヽノ ̄       ヽ
  |      |     ノ / ⊂)            メ  ヽ_,,,---
  |     .|@    | |_ノ  ,へ        / ヽ    ヽノ ̄
  |     |_   / /  | /  |        |  ヽ_,,-''"
__|_    \\,,-'"\__/  /     ,────''''''''''''''"""""""
    ~フ⌒ ̄ ̄  ~ヽ ヽ   ̄ ̄"""'''''''--、""''''---,,,,,,__
    /       ̄''、|ノ           )ヽ
___/       ̄ ̄)           / |___

25 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:42:49 ]
>>23

       --、  _____ -丶
       |;;;/::::::::::::::::::::::::::::::/ |
       // ̄,'' ̄ ̄\:::::::'''',,,丿    
      /-=・=- -=・=- _|:::::::::::::\          
     /ゝ  ▼   <:::::::::::::::<:::: ̄--_
   ---┼/   、   -─-\--<::::::::::::::::::::-_ ふーん
   --─\   ⌒   ̄ ̄ ̄ゝ::::::::::::::::::::::::::::::::::::::::-_
       \__   ゝ/::::::::::::::::::::::::::::::;;;;;;;;;;;::::::::::::\
        ,,ノ    丿:::::::::::::::::::::::::/:::::::::::::::::::::::::::::::::::|
         >    /:::::::::::::::::|::/::::::::::::::::::::::::::::::::::::::::::::|
          >.,. /::::::::::::::::::ノ;;/:::::::::::::::::::::::::::::::::::::::::::::::::|   ____________
           /:::::::::::::::::::ノ;;;;|::::::::::::::::::::::::::::::::::::::::::::::::::::|__-||||||::::||||||::::||||\
           /::::::::::::::::::/;;;;;;;|:::::::::::::::::::::::::::::::::::::::::::::::::::::|::::|||||||:::||||||:::||||||::::::
       (!!!!!!(:::::::::::::::/ ;;;;;;;;;;;;|::::::::::::::::::::::::::::::::::::::::::::::::::::/::::|||||||:::||||||:::|||||||::ノ
       (!!!!!!!!!!!!!ノ  (lllllllllllゝ:::::::::::::::::::::::::::::::::::::::/-- ̄        ̄
                    ,,,,ヽ::::::::-ゝ:::::::::::/
                   (!!!!!!!!!!!!!!!!!!!!ノ


26 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 11:24:33 ]
LoadFromFile/Save〜、
LoadFromStream/Save〜、
みたいな入出力は、
STLではどうなっていますか?


27 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 11:25:45 ]
>>26 fstream, istream, ostream とか

28 名前:26 mailto:sage [2008/02/28(木) 11:35:28 ]
さんks

メモリプールはどんな感じで実装すれば良いのでしょう?
fstreamで読みながら、メモリサイズを増やすと、劇遅な機ガスので。

29 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 11:38:38 ]
>>28
いきなりメモリプールって言われても何のことだかわからん。
読みながら増やすのが嫌なら読む前にファイルサイズで確保すれば
「プール」とか要らんだろ。

30 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 11:41:46 ]
ストリームを読む場合なんかだと、最初にサイズが分かりませんが、
効率的なプールはどうやったら作れますか?



31 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 12:27:52 ]
>>30
サイズが分からないという前提なら、読みながらメモリ確保が必須なのはしょうがないだろ。

「効率的な」というのが「読みながらメモリ確保しない」という意味でないのなら、説明して
もらわないとわからん。

32 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 12:51:08 ]
>>28
漠然とし過ぎていてなんとも。メモリプールを最適化するのに実測なし
で議論するのは簡単ではないと思う。

33 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 12:54:51 ]
STLはメモリプールですが?

34 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 12:58:18 ]
>>33
コンテナだろ?そりゃそうだ。

35 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:00:23 ]
STLを使って、
LoadFromFile/Save〜、
LoadFromStream/Save〜、
がある、
メモリプールの実装教えれ!

36 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:02:11 ]
>>35
ぶん ぶん ぶん ハチが飛ぶ

37 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:11:28 ]
>>35
ありません。さようなら。

38 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:15:09 ]
assignだけで、ファイルがメモリに展開されるの?
 ↓
#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;
 }
}

39 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:18:52 ]
やってみたらわかるんでない?

40 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:21:34 ]
>>38
範囲指定イテレータのassignだよ。vector, deque, list, stringにある。
void container_type::assign(InputIterator b, InputIterator e);



41 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:22:41 ]
istreambuf_iteratorで検索したら分かりますた。

ttp://ml.tietew.jp/cppll/cppll/thread_articles/3804

>stringのコンストラクタはiteratorを取れるんですね。
>ifstream fs(path);
>s= string((istreambuf_iterator<char>(fs)),
>istreambuf_iterator<char>());

1行でLoadは分かりましたが、逆に対になる1行でSaveするにはどうすれば良いでしょう?

42 名前:41 mailto:sage [2008/02/28(木) 13:24:42 ]
それと、stringによるLoadだとテキストファイル対象のようですが、
バイナリファイルだとどうなりますか?

43 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:39:26 ]
vector

44 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:48:55 ]
>>41
string s("unko benki");
ofstream ofs("koumon.txt");
copy(s.begin(), s.end(), ostreambuf_iterator<char>(ofs));

45 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:52:12 ]
>>44
>ostreambuf_iterator
の使い方サンks。

次バイナリファイルの場合キボン。

これが分かれば、LoadFromFile/SaveFromFileメソッドを実装して、今日は定時でさっさと帰ります。

46 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:53:56 ]
>>42
istreambuf_iteratorはバイナリ入力(sgetc, sbumpc)なんだが。

47 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:57:30 ]
>>45
ostreambuf_iteratorはバイナリ出力(sputc)なんだが。
詳しくは、ストリームバッファクラス。

48 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:58:48 ]
>>46
なるほど、
vector<char> Memだったとして、
ファイルストリームfsを作って、
のistreambuf_iteratorをfsから作って、
Memに代入すれば良いのですね?

ってイマイチ書き方が分からない。
コンパイラに相談しながら書いてみます。

イテレーターって難い。


49 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 14:00:01 ]
thx>>47
>ストリームバッファクラス

あ、これ未調査だった。
やっぱ、ストリームの基底クラスがあるんだね。
それが分かれば分かる筈。

50 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 14:03:23 ]
>>49
ストリームクラスの基底クラスではない。
継承関係にはない。
ストリームバッファクラス(basic_streambuf<>)のオブジェクトへの
ポインタを保持している。



51 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 14:29:38 ]
テキスト版は出来ますた。

//---------------------------------------------------------------------------
bool Test::LoadFromFile(const char *filepath, bool bAdd)
{
ifstream fs(filepath);
string SBuf((istreambuf_iterator<char>(fs)), istreambuf_iterator<char>());

//stringからバッファへロード
}
//---------------------------------------------------------------------------
bool Test::SaveToFile(const char *filepath)
{
string SBuf(Text());

//バッファからstringへセーブ

ofstream fs(filepath);
copy(SBuf.begin(), SBuf.end(), ostreambuf_iterator<char>(fs));
}
//---------------------------------------------------------------------------


52 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 14:52:45 ]
>>51
ファイルのオープンに成功したかどうかは
チェックせんの?

53 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:02:08 ]
伸びてると思ったらまた宿題の続きかよ

54 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:05:56 ]
>ファイルのオープン

//---------------------------------------------------------------------------
bool Test::LoadFromFile(const char *filepath, bool bAdd)
{
ifstream fs(filepath);
string SBuf((istreambuf_iterator<char>(fs)), istreambuf_iterator<char>());

if (!fs.is_open()) return false;

//stringからバッファへロード

if (fs.bad()) return false;
if (fs.fail()) return false;

return true;
}
//---------------------------------------------------------------------------


55 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:06:46 ]
あ、やっぱこう。

//---------------------------------------------------------------------------
bool Test::LoadFromFile(const char *filepath, bool bAdd)
{
ifstream fs(filepath);
string SBuf((istreambuf_iterator<char>(fs)), istreambuf_iterator<char>());

if (!fs.is_open()) return false;

if (fs.bad()) return false;
if (fs.fail()) return false;

//stringからバッファへロード

return true;
}
//---------------------------------------------------------------------------


56 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:10:29 ]
少しはマニュアル読め
コード読んでるこっちが恥ずかしくなるわ

57 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:10:42 ]
if(!fs)

でいいだろ

58 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:14:02 ]
ラジャ!

//---------------------------------------------------------------------------
bool Test::LoadFromFile(const char *filepath, bool bAdd)
{
ifstream fs(filepath);
if (!fs) return false;

string SBuf((istreambuf_iterator<char>(fs)), istreambuf_iterator<char>());

if (fs.bad()) return false;
if (fs.fail()) return false;

//stringからバッファへロード

return true;
}
//---------------------------------------------------------------------------

59 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:30:28 ]
やっぱ、バイナリの場合、書き方分かりません。

既に、
>vector<char> Memory
ってのが存在していた場合は、
上の書き方のままだったらロードするときのメモリは別にとって、次に、Memoryにコピーしなきゃならないのでしょうか?

それだと、メモリ2倍で勿体ないような。

60 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:41:00 ]
>>59
vectorに読み込みたいのか?
ならvectorにも同様のコンストラクタがある。




61 名前:59 mailto:sage [2008/02/28(木) 15:48:05 ]
あ、そうではなくて、既に存在しているvectorにロードしたい場合は、ですが。

もしかして、
>vector::swap
でおk?

62 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:55:06 ]
>>61
assign では駄目なのか?
なんか基本があやしいふいんきだから
Accelerated C++ くらいは目を通した方がいいと思うんだが。

63 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 16:02:10 ]
>>61
Memory.assign((istreambuf_iterator<char>(fs)), istreambuf_iterator<char>());
vector<char>(Memory).swap(Memory);

64 名前:59 mailto:sage [2008/02/28(木) 16:05:38 ]
>>62
ふいんきでヴぁれました?

>>63
回答サンks。
上の1行で良いように見えますが、上下2行でセットですか?

まずは、assignぐぐってみまつ。

65 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 16:11:15 ]
この内容って関係してますか?
ttp://etwas.wolfish.org/diary/2007/02/28/2007022801/

66 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 16:58:38 ]
チャットじゃないんだから少し頭ん中整理してから投下してくれ

67 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 17:04:43 ]
>>59
おまえ C++Builderスレでも同じ様なこと書いてる奴だろ?

68 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 17:04:59 ]
バイナリの方、整理しますた。
//---------------------------------------------------------------------------
クラスヘッダー: std::vector<char> Memory;
//---------------------------------------------------------------------------
bool Bin::LoadFromFile(const char *filepath, bool bAdd)
{
ifstream fs(filepath, std::ios::in | std::ios::binary);
if (!fs) return false;

fs.seekg(0, std::ifstream::end);
Memory.resize(fs.tellg());
fs.seekg(0, std::istream::beg);
if (fs.bad()) return false;
if (fs.fail()) return false;

fs.read(&Memory[0], Memory.size());
fs.close();
return true;
}
//---------------------------------------------------------------------------
bool Bin::SaveToFile(const char *filepath)
{
ofstream fs(filepath, std::ios::out | std::ios::binary);
if (!fs) return false;

copy(Memory.begin(), Memory.end(), ostreambuf_iterator<char>(fs));
if (fs.bad()) return false;
if (fs.fail()) return false;

return true;
}
//---------------------------------------------------------------------------

69 名前:59 mailto:sage [2008/02/28(木) 17:06:08 ]
>>67
自分もそう思ったが、よくよく見ると違った。ていうか、あっちの方がラベルが高くて難しい単語が出てくるおw

70 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 17:12:44 ]
鼻血ブーーーーーーーーーーーーーーーーーーー
うんこブリブリブリーーーーーーーーーーーーー



71 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 18:11:16 ]
>>69
いや、それじゃねえな。 偶々std::を使ったレスを持ち出して、 話のはぐらかしか?

72 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 18:19:14 ]
イミフメ>>71


ttp://articles.blog79.fc2.com/blog-date-200610.html
>std::stringの大文字/小文字変換
>通常は上記の書き方で問題ありませんが、これがコンパイルエラーとなる場合があります。

についてkwskキボンorz

73 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 18:24:42 ]
>>72
解説文も解読できないんならおまえ向いてないよ。 工場のライン工やっとけ

74 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 18:30:01 ]
のびてると思ったら…
C++って学校の宿題スレなかったっけ?

75 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 18:31:09 ]
>int toupper(int);
>int tolower(int);
> std::transform(str.begin(),str.end(),str.begin(),toupper);
>: error: no matching function for call to 'transform(__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >,
__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >,
__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, <unknown type>)'

これでもエラー出るんですよねorz

76 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 18:34:38 ]
ゴメンなさい、
> (int (*)(int))std::toupper
に直してませんですたorz

77 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 20:57:33 ]
マクロの場合があるからと違うんか

78 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 22:13:46 ]
>>77
違う。localeを引数に取る多重定義があって、それと曖昧と言われてしまうため。

79 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 23:29:51 ]
関数オブジェクトを使うべき

80 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 05:46:31 ]
typedef std::map<char, void*> MyMAP //void* にはMyMAPのポインタが入る

このようにmapに自分と同じ型を含めたい場合は、どう書くのがスタンダードでしょうか?
今はnewで確保して入れて、(MyMAP*)にキャストして使用&deleteしてるんですが。



81 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 09:43:26 ]
>>80
typedef だと無理っぽいねぇ。 class で囲ってやるか、意味的に奇怪だけど継承するとか。
struct MyMap : std::map<char, MyMap*> {};

82 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 10:15:18 ]
今、軽く衝撃を受けたわ

83 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 10:32:04 ]
>>81
>struct MyMap : std::map<char, MyMap*> {};
そんな事ができるとは思いもしなかった

84 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 10:42:27 ]
>>83
できない理由が無ければできるもんだよ。

85 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 11:08:07 ]
例えば、vectorってベクターって呼んで、vectorクラスなんて呼ばないけど、
STLってできあがるものってクラスなんだね。

86 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 11:14:36 ]
>>85
いいえ。コンテナだけがSTLではありません。

87 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 11:17:57 ]
え”?

STL = コンテナ ∩ イテレーター ∩ ?

88 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 11:23:47 ]
つ[<algorithm>, <numeric>, ...]

89 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 11:25:34 ]
>[<algorithm>, <numeric>, ...]

こういうのって何て呼ぶんだ?
インライン関数群?

90 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 11:45:02 ]
なぜ何でもカテゴライズしたがるんだか



91 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 11:51:26 ]
>>89
インクルードファイルalgorithmやnumericで定義されている関数

>>90
日本人だからでしょ

92 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 12:09:35 ]
テンプレートだけに型に(ry

93 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 12:52:10 ]
boost::type_traits早く標準化汁

94 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 15:59:45 ]
標準アルゴリズムって言葉使わないか?

95 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 17:22:11 ]
いやまて朝鮮人かもしれんぞ
ことによると中国人かも

96 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 17:56:00 ]
>>90
神の教えだからだろ

97 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 18:34:41 ]
std::wstringに入ってるファイル名があるのですが、
ここから拡張子だけを抽出したい場合、定番の方法などあるのでしょうか?

98 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 18:50:10 ]
rfind と substr でいけるんじゃね?
まあ c_str と _splitpath() のほうが面倒が少ないと思うけど。

99 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 13:02:13 ]
Win32APIが使えるなら一発

100 名前:デフォルトの名無しさん [2008/03/03(月) 16:27:08 ]
>>97
std::stringにファイル名が入ってるなら
そのファイル名が入ってるstd::string型のオブジェクト名
がfilenameという名前とすると
char *fname = filename.c_str();
てな感じでchar *型で受け取り
#include <cstring>をインクルードしておき
char *piliod = strrchr(fname,'.');
で拡張子の手前のピリオド位置を取得し
piliod++;ってすれば拡張子名だけchar *型で取得できる
これらの操作をwchar_t用の関数に変更すれば
wchar_t *型で拡張子名を取得できる
まぁ、STL板だしstd::wstringを操作するとしたなら
素直にクラスのfind_last_of使って
sizetype pos = filename.find_last_of(L'.')てな感じで
けつからピリオドの位置見つけてpos++;して
std::wstring fextenshion =filename.substr(pos)とすれば
拡張子だけ手に入る




101 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 18:54:54 ]
が、特殊ケースを想定するとそれだけでは済まないので、
ちまちま書くよりc_strでランタイムやAPIの既存のルーチンに任せるのが定番。






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

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

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