構造体とクラスって何が違うんでしょうか。 デフォルトでprivateがクラス、publicが構造体くらいしか思いつきません...
現状ではそれぐらいの違いしかなかったはず
構造体への値の代入をコンパイルタイムで行いたいのだけど こんなかんじのことをすることはできないでしょうか? struct a{ float v;} mpl::map< pair <char, a.v=8>, pair <unsigned char, a.v=9>, pair <int char, a.v=10>, > type2valuedStr; at<char,type2valuedStr>::type a_char;
c++のコードを貼り付けたホームページを作るのに いいツールがないでしょうか?
<pre></pre>
<code> </code>
Global…はやりすぎか。
>>955 bison と flex を使って、文字への色付けツール作るといいよ。
いい練習になる。
それはいったい何の練習だ?
すいません、初心者なのですが、 可変長のバイト列のバッファを作りたくて、とりあえず vector<unsigned char> buffer; としました。 で、ここに unsigned int の変数のデータや unsigned char の配列のデータを 追加したい場合、どうすべきでしょうか? 今はデータを1バイトずつ push_back() とかしてるんですが、あまりにベタだと思うんで、 もしかして STL の範囲でもっと楽にできたりしますか? buffer をメンバに持つ、複数の型を push_back できるようなクラスを作るというのは おおげさですかね?
とりあえずキャストしてback_inserterにcopyすれば通らない?
memcopyしちゃえよYOU!
vector<T>::insertはvector<T>::iteratorあるいはconstT&しか引数に取らないと思っていたが。
アレッ? insertでどうやって入れるの?
テキストファイル全行を、std::vector<std::string>またはstd::vector<char *>またはchar **等に1行ずつ格納したいのですが、 どうするのがいいのでしょう。 改行コードが現れるまで1文字ずつfgetcで読んでいって長さを測り、 メモリに格納していくという感じになるのでしょうか。 istream等を使うと楽に書けますか? BCBのVCLでいう、TStringListと、そのLoadFromFileみたいなのを書きたいのですが。
>>967 unsigned int uint;
unsigned char uchar[N];
vec.insert(vec.end(), reinterpret_cast<unsigned char*>(&uint), reinterpret_cast<unsigned char*>(&uint) + sizeof(uint));
vec.insert(vec.end(), uchar, uchar + LEN);
vectorの要素への参照(ポインタ、イテレータ)を取得した後にpush_backなどが起こりうるので悩んでいるんですが、 思いつく対処法は以下しかなく、どれも困難です。定石などがありましたら是非ご教授下さい。 ・要素への参照を取得する前にresave()、 push_backされる要素が幾つあるかが分からないので困難。 ・思い切って参照ではなく添え字を記録しちゃう、 でも何か違うような気がする。
972 :
961 :2007/02/01(木) 10:04:44
なるほど、insert でできるんですね。
>>970 ついでにお聞きしてしまうんですが、このように vector の insert やコンストラクタの
引数に2つのポインタを渡して動くのが、ちょっと理解できてないんですが...
vector のメンバにには、普通のポインタの引数を取る型のものってないですよね?
で、デバッガで追うとどうも2つのイテレータの値をもつタイプの関数が呼ばれている
ようなんですが、テンプレートに渡した型のポインタはイテレータと同一視できる
という事なんでしょうか?
かなりアホなことを聞いているかもしれませんが...
>>972 ポインタはイテレータとしての要件をすべて満たす。
イテレータというコンセプトのモデルであるとも言う。
ポインタを模倣するようにイテレータが設計された ってこれ歴史常識じゃないのか…
977 :
デフォルトの名無しさん :2007/02/01(木) 20:01:55
継承関係にある2つのクラスがあるとして class base {}; class derived : public base {}; 派生クラスのコンテナのイテレータを vector<derived*> v; vector<base*>::iterator i = v.begin(); のように基底クラスのコンテナのイテレータに自動的に変換して欲しいと 感覚的には思うんですが、なぜそうなっていないのでしょうか???
思わねーよそんな行為
>>977 それができたら、コンテナにいろんな型を混在
させることが出来ちゃうからじゃないか?
>>977 それは駄目だろう。
例えば、こういうのもあったときに
class derived2 : public base{};
vector<derived*>v;
vector<base*>::iterator i = v.begin();
が出来たら
*i = new derived2;
と書けてvector内の型安全性が損なわれる。
981 :
977 :2007/02/01(木) 20:51:53
*i = new derived2; で型安全性が損なわれるという理由がよく分からないです。 base* p = new derived1; p->func(); delete p; p = new derived2; p->func(); delete p; ↑これは普通ですよね。 ↓これも void func(base* p) {} derived1* p = new derived1; func(p); 駄目な例があると分かり易いんですが…。
982 :
977 :2007/02/01(木) 20:54:55
>>980 すみません。示していただいた例を誤解していました。
>>981 はなしで。もう少し考えます。
983 :
977 :2007/02/01(木) 21:04:00
>>979-980 理解しました。
derived* array[10];
base* p = array[0];
p = new derived2;
こういうことをしようとしていたんですね(でもこれはコンパイル通るんですね…)
どうもでした〜。
結局、ポインタのポインタには、「ポインタの自動変換規則」は適用されない、ってはなしでそ。
いわば、イテレータはショボイポインタ ポインタならDerivedT*にはBaseT*が代入できるが イテレータはショボイからできない 例:--相当のことがができるイテレータは 5種類のSTLイテレータのうち2種類しかない
>983 間違ってる。 derived* array[10]; base** p = &array[0]; *p = new derived2; まだこっちの方が正確。
987 :
977 :2007/02/01(木) 21:52:06
>>986 あ!そうですね。
その場合はコンパイル通らないのですね(
>>984 に書かれているように)。
整合性あるんですね。
988 :
985 :2007/02/01(木) 21:52:38
勘違い。977の言っていることが実行できるとすると derived1,derived2がbaseを継承しているとして vec<derived1*> v1; vec<derived2*> v2; for(vector<derived1*>::iterator it = v2.begin();it!=v2.end();++it){ //v2のイテレータでv1を処理。これはおかしい }
vc2005EEを使っているのですが、質問があります。 デバッグモードではCPU使用率が20〜35%に押さえられているのですが、 リリースモードにすると使用率が常時100%に跳ね上がってしまいます。 これの原因分かる方いませんか? もしくは原因究明の方法が分かる方いませんか? (プロファイラは使えません^^)
C++のマクロで引数を省略することはできますか? 下記のマクロをLOG(msg)のように使いたいのですが。。。 #define LOG(msg,level) writeLog(__FILE__,__LINE__,msg,level) void writeLog(char* f,int line,char* msg,int level=0)
__VA_ARGS__ でググレ ば多少は使える情報があるかもしんない ところで次スレは
993 :
デフォルトの名無しさん :2007/02/02(金) 00:22:25
次スレのタイトルはアカデミックなものにして欲しい
【アカデミックな】C++相談室 part56++
↑ これはひどい
tempalte<template<class> class T>C++相談室<part56>
#define C++相談室 part56
998!!!!
999!
5年間2chにいるけど、今まで一度も1000をとったことがないんだよな。 初めての1000、取れますように。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。