[表示 : 全て 最新50 1-99 101- 201- 2chのread.cgiへ]
Update time : 10/05 08:05 / Filesize : 60 KB / Number-of Response : 263
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

【初心者歓迎】C/C++室 Ver.50【環境依存OK】



1 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:00:47 ]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.49【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1203478421/
【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

60 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 16:13:35 ]
良いかどうかわからないけど、自前で処理キューを作って
メインループをMsgWaitForMultipleObjectsでまわすとか・・・

61 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 16:37:13 ]
>>60
よくこの文章の意味が判ったなぁ。
>別スレッドからメインスレッドで処理する

62 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 16:41:21 ]
普通に解るけど


63 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 17:53:54 ]
マルチスレッドスレか Win32API スレに行った方がいいと思うが。

64 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 21:02:32 ]
とあるメソッドの中で
オブジェクトを生成してあれこれする時

newして操作するのと
一時オブジェクトとして生成して操作するのは
どちらのほうが一般的なんでしょうか?

65 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 21:07:18 ]
new する必然性があるなら new するし、
そうする必然性が無いなら積極的には new しない。

66 名前:デフォルトの名無しさん [2008/03/15(土) 21:12:33 ]
vectorで、循環しているやつをつくりたいときはどうすればよいですか?
つまり、
vector<int> a(10);
のとき、
a[10]と書いてa[0]の意味になってくれるとうれしいんですが。
いまは添字をif文で判定してます。

67 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 21:13:55 ]
i が必ず正なら a[i % 10] でいける。

68 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 21:14:01 ]
継承してoperator[]をオーバーライドすればいいんじゃね。
イテレータはしらね



69 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 21:18:42 ]
仮想デストラクタでない vector の継承は危険だな。
内包して似たクラスを作った方がいい。

70 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 21:21:36 ]
もしかしたらboost.circular_bufferでいいのかもしれない

71 名前:48 mailto:sage [2008/03/15(土) 21:38:34 ]
>>50
ありがとうございます。

ポインタのポインタはローカル変数で使うのでなく、
関数内で作った後、関数外の色んな場所で使います。

色んな場所で使うんですが、
中身を一括で変更しないといけない時があったので、
ポインタのポインタにしました。

72 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 21:40:36 ]
52 は無視か・・・。

73 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 22:22:23 ]
>>72
まあそういうこともある。


74 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 22:46:55 ]
某RPGの白魔法風にメアロケとかなんかそういう呼び方ないの?w

75 名前:48 mailto:sage [2008/03/15(土) 22:54:31 ]
いや、無視したわけじゃないんですが。
イマイチ言わんとしていることがよく分かりませんでした。

下の用途でも、
int** array_2dim = new int*[3]; ←は、
int* array_2dim[3]; ←でいいんじゃなかと思うんですが。

76 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 23:00:23 ]
>>74
ねぇよw
一瞬何のことかとw

77 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 23:04:13 ]
>>75
配列のサイズがコンパイル時に決まるならそれでいいし、
コンパイル時に決まらないなら new するしかない。

78 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 23:08:10 ]
new するしないかはやりたいことによって決まるのであって、
int** を使うから new を使うとかそういうことで決まるものではない。



79 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 23:11:52 ]
コンストラクタの中で冷害が起きるとデストラクタは呼ばれるの?

80 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 23:12:40 ]
オブジェクトの生成が終わってないのでデストラクタは呼ばれない。

81 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 23:12:57 ]
>>79
冷害がおきると米が不作になります

82 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 23:13:05 ]
まだできてないモノの後始末をどう付けろというのだ

83 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 23:13:19 ]
でも構築済みのメンバ変数のデストラクタは呼ばれる。

84 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 23:13:23 ]
>>79
構築済みの基本クラスとメンバ変数の分は呼ばれる
自分のは呼ばれない

85 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 23:26:08 ]
一次元配列のアドレスを関数に渡して手を加えたいんだけど、
できれば例文を使ってやり方を示していただけませんか

86 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 23:27:37 ]
>>79
他の人が書いてる通り、構築済みメンバのみ呼ばれる。
あと、コンストラクタから例外を出してはいけないという迷信を信じないようにね。

87 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 23:31:58 ]
>>85
#include <iostream>

void add(int* x, const int* y, int size) {
 for(int i = 0; i < size; ++i) {
  x[i] += y[i];
 }
}

void show(const int* x, int size) {
 for(int i = 0; i < size; ++i) {
  std::cout << x[i] << ", ";
 }
 std::cout << std::endl;
}

int main() {
 int a[5] = { 1, 2, 3, 4, 5 };
 int b[5] = { 5, 4, 3, 2, 1 };

 add(a, b);
 show(a);
}

88 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 23:35:15 ]
>>87
ありがとうございます。メモ帳に保存して勉強します。



89 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 23:36:24 ]
サイズ渡すの忘れてたよw

 add(a, b, 5);
 show(a, 5);

な。

90 名前:デフォルトの名無しさん [2008/03/15(土) 23:41:30 ]
>>67-69
ありがとうございます。とりあえず67さんの方法でやってみようと思いますが、68と69さんの方法って
どうやればいいですか?いちおうこんな感じに書いてみたのですが、template <class T>
class cvector : public std::vector<T>
{
T operator[](int n) {
return this[n % this->size()];
}
};


91 名前:デフォルトの名無しさん [2008/03/15(土) 23:43:06 ]
pc11.2ch.net/test/read.cgi/streaming/1202224933/
740 :ゴキ ◆KBolwFjGFs :2008/03/02(日) 16:10:33 ID:XSKtFMSK0
いつになったら五期鬼太郎43・44・46・47話うpしてくれるんですか><
750 :ゴキ ◆KBolwFjGFs :2008/03/02(日) 17:10:36 ID:XSKtFMSK0
いつになったら五期鬼太郎43・44・46・47話うpしてくれるんですか><
762 :ゴキ ◆KBolwFjGFs :2008/03/02(日) 23:15:47 ID:XSKtFMSK0
いつになったら五期鬼太郎43・44・46・47話うpしてくれるんですか><
772 :ゴキ ◆KBolwFjGFs :2008/03/03(月) 02:23:17 ID:FCp+FnG70
いつになったら五期鬼太郎43・44・46・47話うpしてくれるんですか><
811 :ゴキ ◆KBolwFjGFs :2008/03/04(火) 00:55:53 ID:4/B+VsKZ0
いつになったら五期鬼太郎43・44・46・47話うpしてくれるんですか><


92 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 23:46:06 ]
assert(n >= 0); がないと危険だな。

まあそれはいいとして、
vector を継承すると

std::vector<T>* v = new cvector<T>;

とした場合に delete v; の動作が未定義だし、
vector<T>& に渡せるけど、
operator[] が仮想関数じゃないから危険だな。

93 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 23:47:10 ]
this 使うなら (*this)[n % size()] だし、
operator[](n % size()) でもいいな。

94 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 23:51:04 ]
いくらなんでも std::vector<T>* は無いだろw

95 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 23:52:04 ]
int -> size_t

public -> private

96 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 23:55:57 ]
n に負の数を渡した場合のチェックが出来ないのが size_t の悩みどころだな。
リングバッファだと 「範囲外のインデックス」 ってのが存在しないから
0 <= n && n < size() なら有効・・・とかできないし。

97 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 00:00:29 ]
リングバッファならむしろ負の数サポートが欲しいところ。
v[-1] == v[size()-1]

98 名前:デフォルトの名無しさん [2008/03/16(日) 00:26:29 ]
>>92-97
ありがとうございます。
アドバイスを総合して実装してみたのですが、コンパイルが通りません。
#include <iostream>
#include <vector>
using namespace std;
template <typename T>
class cvector : public std::vector<T> {
T operator[](const int n) const {
int index = (n >= 0) ? n : this->size()-n;
// assert(n >= 0);
return (*this)[index % this->size()];
}
};

int main(){
cvector<int> vec;
vec.push_back(11);
cout << vec[0];
return 0;
}
コンパイルエラーはこうです。
test.cpp:6: error: 'T cvector<T>::operator[](int) const [with T = int]' is private//T operator[](const int n) const {の行です。
test.cpp:15: error: within this context // cout << vec[0]; の行です。
どうかもうすこし教えてください。





99 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 00:28:34 ]
>>98
エラーメッセージそのまんまだろ。何がわからないんだ?

100 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 00:30:18 ]
private ってのは危険だから private 継承しろって意味じゃないのか

101 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 00:43:03 ]
operator[]の前行にpublic:

102 名前:デフォルトの名無しさん [2008/03/16(日) 00:45:09 ]
>>100
private継承しようとするとpush_backが使えなかったので、public継承にしました。
>>99
これってどう継承してもよびだせないということですか?



103 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 00:51:53 ]
class cvector -> struct cvector

>int index = (n >= 0) ? n : this->size()-n;
this->size()-nだとリングにならないよ

(n >= 0) ? n : (size() - (-n % size()));

あと、&nbsp;と書くとレスに連続した半角空白を入れられる

104 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 00:53:38 ]
operator[] が private だから呼べねーよ!
ってコンパイルエラーだな。

105 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 01:05:00 ]
負の数を認めない型の値の最上位ビットが立っているかどうかなら、
1 << (sizeof(type) * 8 - 1) とand取ってifすれば得られるぜ。

106 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 01:10:48 ]
そこまでして符号無しにこだわる必要は無いと思うというか、
その時点で引数を符号無しにするべきではないと思うというか。

107 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 01:26:05 ]
符号なしにしないとオーバーライドできない、っていうか、
operator[]はvirtualじゃないからオーバーライドできない。

108 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 01:26:55 ]
ならオーバーロードで



109 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 01:32:28 ]
そもそも vector を public 継承しようとしている時点であれというか。
vector とは性質的に別ものだから内包して自分でメンバ定義していくのが正しい。
単純な委譲で済む関数はインライン関数にしとけばインライン展開されるだろうし。

どうしても継承したいなら private 継承して、
size() とかそのままでいい関数は using する。

110 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 01:34:09 ]
つうか普通このケースでは包含だよなぁ

111 名前:デフォルトの名無しさん [2008/03/16(日) 01:42:27 ]
質問よろしいですか?

0 1 2
3 4 5
6 7 8

このようになっている時にクラーメルの公式のように(掛け算ではありませんが)
1+5+6というふうにするにはfor文でどのようにすればいいのでしょうか?

112 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 01:57:23 ]
int data[3][3]; とするならば

int sum = 0;
for(int i=0; i<3; i++)
{
  int x = data[i][(i + 1) % 3];
  sum += x;
}
// sum = 1+5+6 = 12

113 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 02:01:02 ]
3つしかあり得ないならハードコーディングするのも手だと思う。
for 使うなら % だろうけど、逆向きの時は少し注意が必要(i が負になるとマズい)。

114 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 02:05:16 ]
配列アクセス用のインデクステーブルを作るとか

115 名前:デフォルトの名無しさん [2008/03/16(日) 02:05:33 ]
>>112,113
すいません、言葉が足りてませんでした
配列は固定ではなくN×N行列で
ポインタを*paとする時

pa    pa+1  pa+2
pa+3   pa+4  pa+5
pa+6   pa+7  pa+8

でどう求めるかということでお願いします

116 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 02:12:47 ]
[i][(i + 1) % 3] を [i * N + (i + 1) % N] にするだけでしょ。

117 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 02:14:36 ]
for 使うなら % だろうけど、逆向きの時は少し注意が必要(i が負になるとマズい)。

118 名前:デフォルトの名無しさん [2008/03/16(日) 02:21:37 ]
>>116

i=0  0*3+(0+1)%3 = 0
i=1  1*3+(1+1)%3 = 3
i=2  2*3+(2+1)%3 = 7

こうなるんじゃないんですか?



119 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 02:23:30 ]
>>118
頭大丈夫か

120 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 02:26:40 ]
小学生からやりなお(ry

121 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 02:26:50 ]
>>118
とりあえず今日はもう寝とけ

122 名前:デフォルトの名無しさん [2008/03/16(日) 02:26:54 ]
>>119
すいません勘違いしてました
どうもありがとうございました

123 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 11:30:09 ]
       ∧∧
       / 中\
      (  `ハ´) いつになったら福田康夫は日本人が犯人だと認めるアルか
      ( ⊃┳⊃
      c(_)ヘ⌒ヽフ 【中国産・毒ギョーザ】日本人が“犯人”? 共同通信の日本人記者拘束で中国のネット世論沸騰★5
     (朝日(-@∀@) mamono.2ch.net/test/read.cgi/newsplus/1204264902/
≡≡≡ ◎―◎⊃⊃ キコキコ

124 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 11:40:32 ]
毒餃子は中国工場内での混入がほぼ間違いなくなったよな。
濃度は3000ppmって。。漬け置きレベルらしいな。
シナはどこまでも外道。オリンピック開催させるなよ。

125 名前:デフォルトの名無しさん [2008/03/16(日) 11:41:33 ]
102です。以下のように実装してみて、動作することを確認しました。でも2点質問させてください。
(1)vectorを継承した方で、size()はusingsしておけばいいといわれましたが、やり方がわかりません。
でも知りたいのでどうか教えてください。
(2)同じくvectorを継承した方で、public継承するのはよくないと言われましたが、(繰り返しになりますが)
private継承するとpush_back等のvectorクラスの機能が使えないと思います。ここはどうするべきなのでしょうか?
template <typename T>
class ring_vector {
public:
  T operator[](const int n) const {
    int index = (n >= 0) ? (n % v.size()) : (v.size()-(-n % v.size()));
    return v[index];
  }
  std::vector<T> v;
};

template <typename T>
class ring_vector2 : public std::vector<T> {
public:
  T operator[](const int n) const {
    int index = (n >= 0) ? (n % this->size()) : (this->size()-(-n % this->size()));
    return std::vector<T>::operator[](index);
  }
};




126 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 12:00:48 ]
>>125
(1)レスを追ってないから知らん

(2)転送関数

127 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:00:00 ]
Linux+gccでCPUの型番や周波数などを取得する方法を教えてください

128 名前:103 mailto:sage [2008/03/16(日) 13:00:16 ]
>int index = (n >= 0) ? (n % v.size()) : (v.size()-(-n % v.size()));
>>103のは元のソースがreturn [index % size()];なので、それを前提としてたんだけど・・・。

return v[index];にするなら、負の数の方も、もう一度%しないと、
n == -size() のとき、return v[size()]; になっちゃうよ。



129 名前:103 mailto:sage [2008/03/16(日) 13:02:20 ]
return v[index];

return v[index==size()?0:index];
にするのでも良いけど。

130 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:04:24 ]
>>125
ring_vectorの方で良いよ。
継承するの変だと思うし。

131 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:04:53 ]
system("cat /proc/cpuinfo");

132 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:12:54 ]
クラスで場合によっては定義しない変数は宣言できますか?
ありましたら、どうすればいいか教えてください。

133 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:17:07 ]
template <typename T>
class ring_vector3 : private std::vector<T> {
typedef std::vector<T> parent;
public:
T operator[](const int n) const {
int index = (n >= 0) ? (n % this->size()) : (this->size()-(-n % this->size()));
return parent::operator[](index);
}
using parent::push_back;
};

みたいな。

134 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:24:34 ]
>>132
質問をもう少しkwsk

135 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:26:44 ]
>>132
使わなければ

136 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:32:21 ]
使わなくても定義は必要じゃね

137 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:38:31 ]
だから、仮想デストラクタを持たないvectorを継承すんなよw

138 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:40:56 ]
そろそろvirtualから離れようぜ



139 名前:133 mailto:sage [2008/03/16(日) 13:48:13 ]
何か問題が?

140 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:53:31 ]
>>139
使い方によってはvectorのデストラクタが呼ばれないことがある。

141 名前:133 mailto:sage [2008/03/16(日) 13:56:17 ]
使い方?vector<T> *にキャストする話?
出来るの?private継承なのに。

142 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 14:14:38 ]
>>141
定義をそれ以上いじらなければ問題ないっしょ。
std::vector<T>* p() {return this;}
みたいなメンバ関数を追加したりすれば、
privateな継承でも基底のポインタが得られるので、
単にprivate継承であるというだけで常に安心できるわけではない。

143 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 14:17:26 ]
それをdeleteしたら吹くw

144 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 14:23:24 ]
そんなメンバをつくって、しかもdeleteしちゃうような輩は、
vector<int> v;を使わせても
delete &v[1];とかするだろうなw

145 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 14:25:01 ]
イテレータは循環するようにしなくていいのか?

146 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 14:28:34 ]
ちょw end()どこだよw
コンテナじゃないんだし、いらないっしょ

147 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 14:35:21 ]
どのイテレータをインクリメントしてもendと等しくはならない、とか

148 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 14:46:28 ]
STLのアルゴリズムに食わせられないじゃん



149 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 14:48:38 ]
>>134-135
extern BMPImgData bmpA;
extern BMPImgData bmpB;

class BMPImgData {
public:
HDC mHdc;
int w; //幅、高さ
int h;
int anmx;
int mv;
//・・・・
//↓bmpAには不要
POINT ptgt; //リアルマップ座標(移動)0~10
POINT tgt; //目標リアルマップ座標
POINT Root[MAX_MAPX][MAX_MAPY]; //マップ座標
//・・・
BMPImgData();
~BMPImgData();
};
多次元とか宣言すると不安で不安で。
もしかして宣言ってメモリ確保しなければ全然処理重くならないですか?
すげえ初歩ですが。

150 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 14:53:38 ]
メモリを喰うのが嫌ならクラスを分けるか、
動的に確保するしかないかと

151 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 15:03:56 ]
>>149
bmpAに不要なメンバを BMPImgData から除去して、BMPImgDataを継承した別クラスBMPImgData2にそのメンバを追加すれば?
BMPImgData bmpA;
BMPImgData2 bmpB;
もちろん、クラス名は適切に。


152 名前:デフォルトの名無しさん [2008/03/16(日) 15:13:50 ]
namespace AAA {
void func() {}
}
class Hoge {
friend void AAA::func();
};
とするとコンパイルできません。どうすればよいですか?

153 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 15:15:57 ]
>>152
>どうすればよいですか?
コンパイルエラーのメッセージを書く。
そのメッセージについて>>152が何を考えて、何が分からないのかを書く。
エラーメッセージの内容を調べて無いなら、調べてから出直し。


154 名前:149 mailto:sage [2008/03/16(日) 16:02:00 ]
>>150-151
ありがとうございます。^^

155 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 16:02:38 ]
>^^
むかつくからやめろ

156 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 16:11:29 ]
^^;

157 名前:デフォルトの名無しさん [2008/03/16(日) 16:20:40 ]
--;

158 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 16:54:21 ]
(;:. @u@)



159 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:08:37 ]
vectorやらlistを使用する際
コンストラクタで指定した長さ以上の要素を食わせるとどうなるのでしょうか?

160 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:09:22 ]
>>159
「食わせる」って何?

161 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:10:32 ]
ああ、すいません
要素数20のlistに21個目の要素を追加しようとするとどうなるのかなぁと

162 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:11:03 ]
int型の変数をchar型の配列にするにはどうすればいいのでしょうか?

163 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:13:13 ]
>>161
そりゃ、追加されるんだろ。

164 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:15:17 ]
>>161
STLのコンテナは、追加はいくらでもやってよい。
コンストラクタで要素数を指定するのは、
あらかじめメモリを確保しておくことで、後から再確保するのを防ぐ、単なる最適化に過ぎない。

165 名前:164 mailto:sage [2008/03/16(日) 18:17:49 ]
すまん、reserveと勘違いした。
コンストラクタで指定した要素数は、ちゃんと要素が追加されるよな。

166 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:21:25 ]
v[20] = 1; とかで追加した気になってるかもしれないから
「追加」 の定義をきちんと聞いておいた方がいいぜ。

167 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:26:50 ]
>>166
それは既存要素に対する代入だろ。sizeには反映されない。
下手したらコンテナの整合性を壊す。

て、>>166は言いたいんだと思う。

168 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 19:11:13 ]
>>162
やりたいことをもっと明確に説明しないと回答のしようが無い。
たとえば12345という値を持つint型変数があったとして、どのような状態のchar配列が欲しいんだ?



169 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 19:32:59 ]
>>162
int型をchar型の要素数4(とは限らんが)の配列として扱うの?
それなら共用体になるが

170 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 19:45:07 ]
ありがとうございます
共用体しらべてみます

171 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 20:19:59 ]
>>170
エンディアンには気をつけてな
どうせsprintfとかいうオチだとは思うが

172 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:21:29 ]
www.imgup.org/iup575962.jpg.html
・・・VISUAL C++というソフトを使っていたら突然こうなりました
OSはVISTAで、これ以降いくらプロジェクトを作成しようとも、どうやら自動生成されるファイルが欠落しているようです
アンインストール、再インストールも試しましたが無駄でした、当然管理者権限もです。 どうすればいいでしょうか?

173 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:32:10 ]
メッセージのファイルはあったか?あったらそれを直接クリックしてみな。

174 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:36:03 ]
>>173
なかったです、正常動作している友人のプロジェクトフォルダを丸ごとZIPで送ってもらったら
DEBUGフォルダがありましたが、自分のほうでは生成されなくなってました

175 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:38:59 ]
ウイルス・・・じゃないよな?

今までは正常に実行できてたんだよな?

176 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:48:51 ]
ないってことは、コンパイルされた結果のファイルが無いんだな。
リビルドして、出力ウインドウにエラーメッセージがないか確認するべし。
プロジェクトのプロパティーページのリンクの項の出力ファイルのパスを確認しよう。その友人のプロジェクトが絶対パスになってないか?

177 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:51:08 ]
VC2005 って Vista に対応してたっけ?

178 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:57:08 ]
Vista対応パッチがあるという話は聞いたゾ。俺Xpだからよくわかんね



179 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:57:50 ]
>>176
// test.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
これに
int main(void) { return 0;}
これを書き足してリビルドしたら
1>------ すべてのリビルド開始: プロジェクト: test, 構成: Debug Win32 ------
1>プロジェクト 'test'、構成 'Debug|Win32' の中間出力ファイルを削除しています。
1>コンパイルしています...
1>stdafx.cpp
1>test.cpp
1>コードを生成中...
1>マニフェストをリソースにコンパイルしています...
1>リンクしています...
1>LINK : 前回のインクリメンタル リンクで C:\Users\owner\Desktop\Documents\Visual Studio 2005\Projects\test\Debug\test.exe が見つからなかったか、ビルドされませんでした。フル リンクを行います。
1>LINK : warning LNK4067: エントリ ポイントがあいまいです。'mainCRTStartup' が選択されます。
1>マニフェストを埋め込んでいます...
1>ビルドログは "file://c:\Users\owner\Desktop\Documents\Visual Studio 2005\Projects\test\test\Debug\BuildLog.htm" に保存されました。
1>test - エラー 0、警告 1
========== すべてリビルド: 1 正常終了、0 失敗、0 スキップ ==========
で、ぱっとみは何とかなったみたいです  再度printfをためしてみます   一旦ありです

180 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 00:01:22 ]
えー

181 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 00:04:13 ]
mainは一個でいいです。どちらか一方だけにしましょう。



182 名前:デフォルトの名無しさん [2008/03/17(月) 04:09:01 ]
イテレータを循環に、ってできるのですか?

183 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 04:26:18 ]
演算子オーバーロードすればできるんじゃね?

184 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 07:29:05 ]
自分でイテレータを作れば。

185 名前:デフォルトの名無しさん [2008/03/17(月) 09:09:35 ]
>>183-184
自分でイテレータってつくれるんですか?
あと、演算子のオーバーロードでできるんでしょうか?



186 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 09:11:19 ]
できるっていってるじゃない。

187 名前:デフォルトの名無しさん [2008/03/17(月) 10:44:58 ]
>>186
もうちょっとだけ具体的に言ってみてよ。

188 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 10:54:37 ]
>>187 何を?



189 名前:デフォルトの名無しさん [2008/03/17(月) 11:09:18 ]
独自イテレータのつ•く•り•か•た


190 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 11:13:53 ]
質問すればいいじゃん

191 名前:デフォルトの名無しさん [2008/03/17(月) 11:16:27 ]
ググッたけどわかりませんでした。

192 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 11:33:44 ]
class iterator {};

できあがり。
これ以上具体的な回答は、質問が具体的でない限りあり得ない。

193 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 13:03:46 ]
ありえないのはオマエの禿頭

194 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 13:19:10 ]
ムキになるなよw

195 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 13:27:01 ]
ムケてるのはオマエの禿頭

196 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 13:41:30 ]
ムケてないのか…

197 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 14:24:11 ]
包茎で無能じゃ救いようがないよ・・・

198 名前:デフォルトの名無しさん [2008/03/17(月) 14:39:59 ]
包茎で無能だけど禿げてはいないぞ(怒)



199 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 15:12:57 ]
しまった……全部に当てはまる……。

200 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 15:35:27 ]
包茎で禿げてるから、無能と呼ばれないように頑張るわ……

201 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 20:56:53 ]
包茎で禿で不能です

202 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 21:45:45 ]
operator==とかの引数の対称性って手動で保守するしかないんですか?
こういうやつ↓
bool operator==(const A& lhs, const B& rhs)
{...}
bool operator==(const B& lhs, const A& rhs) // これを自動化したい
{ return rhs == lhs; }

203 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 21:52:23 ]
boost

204 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 21:52:26 ]
>>202
Boost.Operatorsにまとめられている。
その例だと、Aがequality_comparable<A, B>を継承して、
operator==(const A& lhs, const B& rhs)を定義すれば、
operator==(const B& lhs, const A& rhs)とoperator !=が作られる。

205 名前:デフォルトの名無しさん [2008/03/17(月) 22:56:40 ]
大体の人はよく使う関数などをまとめた個人用ライブラリを作ってると思うのですが
どのように管理しているんでしょうか?

* mylib/*.{h,c} と一つのディレクトリにヘッダとソース。
* mylib/include/*.h,mylib/src/*.c で mylib/lib/libmylib.a とか。
普通のライブラリ風に。

で使うときにはどうしてます?

* mylib ごとコピーして?
* mylib/include/ とかにパスを通してる。で -lmylib

どうすると楽なのか悩んでます。


206 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 22:59:48 ]
不良債権が流行った頃
護送船団とか何とか叩いておいてアメリカがこの様なわけだが


207 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 22:59:54 ]
>>205
コンパイラオプション (多分 -I) + makefile

208 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 23:44:55 ]
クラスAがあり、クラスBがクラスAのインスタンスのポインタpを持っている形のプログラムがあります。
クラスAにはchar変数textがあり、クラスBからsprintf(p->text, "test");を実行します。
この時エラーが起きてプログラムが強制終了するのですが、何かおかしな手順を踏んでいるのでしょうか?



209 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 23:47:16 ]
if文とfor文だけで一次元配列を大きい順にソートしたいんですけど
自分の力量では出来ませんでした。
やり方を教えてください。

210 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 23:50:39 ]
>>208
クラス定義を貼れ

211 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 23:56:47 ]
>>209
ソートでググれ。

212 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 00:08:51 ]
>>210
クラス定義はしてあります。

213 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 00:11:05 ]
ぬう。言葉が通じない

214 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 00:12:11 ]
>>208
・pがAのインスタンスを指していない。
・pが指しているAのインスタンスはすでに死んでいる。
・A::textが5byteに満たない。
・sprintfの前までに何かメモリを壊している。
・その他
この中のどれなのか判定してやるから、ソースを貼れと言ってるの

215 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 00:15:58 ]
意味をはき違えました。
コードが非常に長いので今編集しています。

216 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 00:29:58 ]
class Task
{
public:
void Add(Task *obj, LPCSTR name);//インスタンスを登録する関数です。
Task* Find(char *name);//インスタンスのポインタを返す関数です。
void Do();//登録されたインスタンスのExec();を実行
protected:
virtual void Exec();
}

class Font : public Task
{
public:
char text[10];
protected:
void Exec(){ cout << text << endl; }
}

class Edit : public Task
{
public:
Init(){ font=(Font*)Find("font"); }
void setFont(){ sprintf(font->text, "text"); }
private:
Font *font;
protected:
void Exec(){ setFont(); }
}

217 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 00:30:21 ]
main()
{
Task task;
task.Add(new Font(), "font");
task.Add(new Edit(), "edit");
while(true)
task.Do();
}

色々大量に省きましたが大体こんな感じです。

218 名前:208 mailto:sage [2008/03/18(火) 00:33:47 ]
すいません、自己解決しました。



219 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 00:37:07 ]
EditのInit()はどこで呼ばれてんの

220 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 00:41:22 ]
>>205
これ俺も気になる。なかなか話題にもならないし、ぐぐっても出てこないし、
みんなどうしてるって疑問は昔からあった

俺は mylib/include、mylib/source、mylb/lib にして、
include、lib にパスを通す派

221 名前:208 mailto:sage [2008/03/18(火) 00:45:27 ]
>>219
Add内に実行する部分があるのでそこで実行されてます。
上のだと省いてます。

インスタンスの登録順序のせいでポインタが格納できていないのが問題でした。

222 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 00:51:13 ]
>>220
コピーしたら元を変更したときにコピーした数だけ更新してまわらないといけないだろ。
ディレクトリ分けてパス指定するのが当然だから、話題にもならないんじゃない?

223 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 00:55:36 ]
Visual C++で

FileInfo^ fi = gcnew FileInfo(filename);
__int64 size = fi->Length;

のように取得したファイルサイズを32bitに変換し、さらにリトルエンディアンに変換した後、
バイナリでファイルに書き出したいのですが、何か良い方法はありますか?


224 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 01:00:11 ]
>>223
c++/cliは別スレで。

225 名前:208 mailto:sage [2008/03/18(火) 01:01:47 ]
文字列代入でつまりました。
LPTSTR text;
_stprintf(text, "text");
これでエラーが起こるのですが、正しくはどうすればいいのでしょうか?

226 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 01:02:01 ]
>209
とりあえず速度とか、プログラムらしさというのを全く気にしなくて良いなら(勉強の一貫なら)

一度、数字の書いたカードを手作業で並べ替えてみるといいかもしれない。
そのときの手順を1つ1つメモしていくんだ。

227 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 01:04:09 ]
>>225
text はどこを指しているのか。

228 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 01:04:26 ]
>>223
VC++なら、x86だから元々リトルエンディアンですが。
つーか、下位バイトから順番に出力すればいいのでは?



229 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 01:07:32 ]
>>226
やってみます・・・

230 名前:208 mailto:sage [2008/03/18(火) 01:08:08 ]
>>227
ありがとうございました。
TCHAR関係すべて勘違いしていました。

231 名前:202 mailto:sage [2008/03/18(火) 01:30:50 ]
>>203,204
レスthx
いろいろなoperatorを定義する時に便利そうですね。
でも、operator==だけを見ると、あまり便利に感じないです。
// Hoge.cpp
#include "A.h"
#include "B.h"
bool operator==(const A& lhs, const B& rhs) {...}
というのを考えていたので、Aに修正を加えないといけないのがちょっと・・(Bはそのままというのも気になる)。
普通に定義することにします。

232 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 02:07:56 ]
209です。ググったりしたのですが難しいです。
よろしければ手直ししていただけませんか。Visual C++ 6.0です。

int hairetu(int jun[N]){
int max,j,k,retu[N],jun2[N];

for(j=0;j<N;j++){
jun2[j]=jun[j];
}

for(k=0;k<N;k++){
for(j=0;j<N;j++){
if(max<jun[j])
max=jun[j];
jun[j]=jun2[k];
}
retu[k]=max;
max=retu[k];
}

for(j=0;j<N;j++){
jun[j]=retu[j];
}
return(jun[N]);
}

233 名前:デフォルトの名無しさん [2008/03/18(火) 02:12:58 ]
開発環境はVS6、コードはANSIです。

_msize()ってmalloc()やrealloc()などで
指定したメモリサイズを返すと思ってましたが、
つなげるランタイムライブラリによって変わるのですか?

現状でコンパイルオプション「コード生成」の「使用するランタイムライブラリ」を
「シングルスレッド(デバッグ)」にすると指定したサイズ、
「シングルスレッド」にすると指定したサイズから直近の16の倍数値が返ってきます。
これってC言語をする人にとって知ってて当たり前のことなんですか?
それともオプションで調整できることなんですか?


234 名前:205 [2008/03/18(火) 02:17:24 ]
>>207,220
やっぱりそういう感じになるんですかね。

>>222
そう思ったんですけど頻繁に mylib は更新されて少し前に書いたものが
コンパイル通らなくなったりして結局使ってる側を修正しないといけなかったりで…

どうするといい感じに管理できるのかなぁと。

235 名前:208 mailto:sage [2008/03/18(火) 02:17:32 ]
>>232
バブルソートでググってみ。
選択ソート、挿入ソートでもOK。
それでダメなら、並び変えるときに自分がどういう手順を追っているか考えてみ。

10 8 3 5 7 1 6 2 4 9

1 2 3 4 5 6 7 8 9 10

1つずつ動かして、その手順を元にコード起こす。

236 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 02:19:42 ]
>>232
とりあえず要素5つくらいの配列を考えて、そのプログラムを動かすと配列の要素がどう変わっていくかを
紙の上で1ステップずつ書き出してみな。
・勉強したアルゴリズムの通りに並んでいかないなら、プログラムのロジックが間違っている。
・ググって調べたアルゴリズムがまだ理解できていないなら、まずはそれを理解するとこ。
 アルゴリズムの説明が欲しいなら、どこか適切なスレへ。
・自分で書いたプログラムがどういう動作になるのかを追えないなら、勉強不足。
 C言語の仕様的に分からないことがあるなら、また質問してみれば?

237 名前:デフォルトの名無しさん [2008/03/18(火) 02:24:24 ]
>>232
qsort()じゃだめなんですか?
勉強の為にソートロジック作るなら
クイックソートやマージソートやバブルソートなどで検索すればコードがでてくると思いますよ。

参考までに一番単純なバブルソートの例を

void bubble_sort(int a[], int n)
{
int i, j, t;

for (i=0; i<n-1; i++) {
for (j=n-1; j>i; j--) {
if (a[j-1] > a[j]) {
t = a[j];
a[j] = a[j-1];
a[j-1] = t;
}
}
}
}


238 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 02:27:32 ]
>>233
_msize()ってANSIじゃないでしょ。



239 名前:デフォルトの名無しさん [2008/03/18(火) 02:30:14 ]
>>238
う・・・だったみたいですね。
Win32APIやMFCでなくコンソールアプリケーションで作成に訂正です。


240 名前:233 [2008/03/18(火) 02:33:14 ]
long lGetSize = 0;
char *pcDat = NULL;

pcDat = realloc(NULL, 1);
lGetSize = _msize(pcDat);
printf("1 = %ld\n", lGetSize);
→ シングルスレッド(デバッグ)での結果=1
→ シングルスレッドでの結果=16

pcDat = realloc(NULL, 13);
lGetSize = _msize(pcDat);
free(pcDat);
printf("13 = %ld\n", lGetSize);
→ シングルスレッド(デバッグ)での結果=13
→ シングルスレッドでの結果=16

pcDat = realloc(NULL, 17);
lGetSize = _msize(pcDat);
free(pcDat);
printf("17 = %ld\n", lGetSize);
→ シングルスレッド(デバッグ)での結果=17
→ シングルスレッドでの結果=32

って具合です。


241 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 02:34:05 ]
>>235-237
ありがとうございます。
qsortも使い方が分からないのでとにかくif文とfor文でやることにしていました。
>>237さんのバブルソートの例を見ながら組み上げたいと思います。

242 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 02:40:20 ]
>>240
_msizeの動作は詳しく無いから想像だけど…。
リリース版では効率化のために1とか13とか中途半端なバイト数で確保せずに、16バイト単位で領域の割り当てをするけど
デバッグ版ではデバッグしやすいように指定したバイト丁度を割り当てているのでは?
(実際には管理領域やメモリ破壊検知などのためにもっと余分に割り当てているだろうけど。)


243 名前:233 [2008/03/18(火) 02:52:02 ]
>>242
確かにこの現象が判明したのはリリースでのコンパイルですが、
デバッグで「使用するランタイムライブラリ」を「シングルスレッド」に変えるだけでも同じ現象になるのです。

これはもうランタイムライブラリの仕様としか言いようがないのでしょうか?
同じコードなのに違う動作をするというのはどうも納得いかないのです。
(オプション変更によってコンパイルorリンクエラーになるならまだわかりますが・・・)
これがC言語をする人にとって周知の事なら自分の知識不足として納得しようかと思い書き込みましたw


244 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 03:07:25 ]
>>243
MSDNによれば
>ヒープに割り当てられたメモリ ブロックのサイズを返します。
と書いてある。
あくまで「割り当てられたサイズ」であり、これは「要求したサイズ」とは必ずしも一致しない。

>同じコードなのに違う動作をするというのはどうも納得いかないのです。
ランタイムライブラリに依存する処理なのだから、リンクするランタイムライブラリが異なれば
結果が異なることは特に不自然ではないと思う。

>これがC言語をする人にとって周知の事なら自分の知識不足として納得しようかと思い書き込みましたw
すでに出ていることだけど _msizeはANSIの標準ではなく MS固有のAPIでしかないのだから、
C言語をする人にとって周知の事というわけではない。



245 名前:233 [2008/03/18(火) 03:20:59 ]
>>244
言ってることはわかるのですが、
それならデバッグ用のランタイムの動作はデバッグなしのランタイムとあわせるべきじゃないかと思いますね。
例えば、デバッグでステップ実行で確認したのにデバッグ外すと動作変わるなら、デバッグの意味ないですよね。
とりあえず周知でないこととオプションで対応できるようなことでないのはわかりました。


246 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 03:35:54 ]
>>245

つ msdn2.microsoft.com/ja-jp/library/974tc9t1(VS.80).aspx

247 名前:デフォルトの名無しさん [2008/03/18(火) 06:05:02 ]
下のプログラムは
ファイル名を入力させて
検索文字列を入力して
「該当ファイルの検索文字列を含む行を全て表示するプログラム」です

しかしながら実行すると下のコードの
getlineがすっとばされてしまい
こちらから検索文字列の入力を行うことができません
なぜですか?

248 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 06:05:33 ]
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
using namespace std;

int main()
{
string s;
vector<string> v;

cout << "Input filename" << "\n";
cin >> s;
ifstream in(s.c_str());

while(getline(in,s))
v.push_back(s);

cout << "検索文字列";
//↓の入力がすっとばされてしまう
getline(cin,s);

for(vector<string>::size_type i = 0;i < v.size();i++){
if(v[i].find(s) != string::npos)
cout << i << ":" << v[i] << "\n";
}

return 0;
}




249 名前:247 mailto:sage [2008/03/18(火) 06:12:54 ]
環境はcygwinを使っています

250 名前:sage [2008/03/18(火) 06:49:59 ]
getlineの定義は
istream &getline( char *バッファ, streamsize 文字数 );
istream &getline( char *バッファ, streamsize 文字数, char 境界文字 );
ですよね
cin.getline(s,MAXSIZE)
にしたらだめでしょうか

251 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 06:55:30 ]
ファイル名で入力した際に入ってきた改行文字が残っているんではないですか
getline(cin,s) の前に
cin.ignore(); で一文字削ってみては

252 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 07:31:29 ]
>>244の補足になるけど、malloc/calloc/reallocも
標準では、指定された大きさ「以上」のメモリを確保するとなっていて、
ぴったりちょうどの大きさを割り当てなければならないという決まりはない。

253 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 07:48:32 ]
>>245
そもそも_msize()==(要求サイズ)という条件に依存しようとすることが間違い。
>>244にあるとおり、この条件が常に成立するなどとは、MSは言っていないはず。
処理系依存ってやつ。

254 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 09:20:07 ]
>>245
> 例えば、デバッグでステップ実行で確認したのにデバッグ外す
> と動作変わるなら、デバッグの意味ないですよね。

デバッグビルドでデバッグし易いようにコードが変わるのは、よくある
こと。デバッグビルドとリリースビルドで動作に違いがないなら、デバッ
グビルドの意味ないじゃん。


255 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 11:58:02 ]
デバッグビルドだとちゃんと動くけどリリースビルドにすると落ちるとか言うのはよくあるよな。
たいていは初期化不足だけど。

256 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 14:35:41 ]
>デバッグの意味ないですよね
あるよ。
デバッグビルドとリリースビルドの違いで困るプログラムは、
まずいプログラムだから、それを自覚することが出来る。

257 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 17:33:21 ]
C言語とか意味わかんね
柴田望洋ってどうなの?

258 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 17:50:42 ]
柴田望洋についての話に進める前にC言語を意味分かるようにする事の方が先決というか
それを先にやらないと柴田望洋について話しても何も分からないと思うというか
C言語すら分からないようじゃ柴田望洋についての話も分からんだろうというか
それ以前に柴田望洋の話はマ板でやれ。



259 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 17:54:45 ]
1:#include <iostream>
2:#include <string>
3:
4://using namespace std;
4:
6:class Foo {
7:private:
8: std::string s;
9:
10:public:
11: string getValue ( void ) { return s; };
12: void setValue ( const string s_in ) { s = s_in; };
13:};
14:
15:int main ( void ) {
16: Foo f;
17: f.setValue("abcd");
18: std::cout << f.getValue() << std::endl;
19: return (0);
20:}

これをコンパイルすると、次のメッセージが出てコンパイルエラーになってしまいます。
"foo2.cpp", 行 11: エラー: 型の名前が予期される位置に "string" があります.
4行目のusingステートメントを有効にするとコンパイルできます。
何が間違ってるのでしょうか?
Cは経験あるのですが、C++はド素人で良く分かりません(T_T


260 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 17:57:53 ]
4,8,11行目を見て、何か気付かないか?

261 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 17:59:04 ]
namespaceや名前空間でググれ

262 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 18:03:35 ]
うわ、自分で書き込んだレスみたらすぐ分かったw
エディタで見てるときはどうしても気付かなかったのに。
お目汚しすいませんでした・・・







[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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