[過去ログ] 【初心者歓迎】C/C++室 Ver.100【環境依存OK】 [無断転載禁止]©2ch.net (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
16
(3): デフォルトの名無しさん [sage] 2016/11/07(月) 19:07:23.45 ID:hOJqMng1(3/4) AAS
要求は固定長の配列であって、動的に増やせるようにしろとは言ってないので
それのコードは非効率にしかならないと思うよ
17: デフォルトの名無しさん [sage] 2016/11/07(月) 19:25:01.70 ID:fwwW9lIx(2/2) AAS
>>11
11(1): デフォルトの名無しさん [sage] 2016/11/07(月) 14:56:04.42 ID:6MsAvbZq(1) AAS
↑幻覚をみた糖質のつぶやき
ん?
int b[2][3];をわたせんの?
func(int a[][3]);以外で
18: デフォルトの名無しさん [sage] 2016/11/07(月) 19:50:01.21 ID:Z2RT26Su(1/2) AAS
>>16
だからvector使ってないでしょう
unique_ptrのパフォーマンス知らないの?
19
(2): デフォルトの名無しさん [sage] 2016/11/07(月) 20:07:47.59 ID:Z2RT26Su(2/2) AAS
ID:hOJqMng1 の主張の変遷

1.わざと大きい初期化子を与えると実行時にアクセス違反になると主張
→だから動的に対応できるようにした

2.すると今度は非効率的だからarrayを使えという
→arrayが特に効率的なわけではないし、今度は「要求は固定長の配列だ」と言い出す

どう考えても言ってることがコロコロ変わってるんだが
20: デフォルトの名無しさん [] 2016/11/07(月) 21:12:34.93 ID:L762Pvtq(1) AAS
!!喧嘩の予感!!
21
(1): デフォルトの名無しさん [sage] 2016/11/07(月) 21:25:52.93 ID:nZ1H9hgf(1) AAS
A() : a{b[0], b[1]} {}がダメだった人にC++11を押しつけてどーすんだ
>>12
12(2): デフォルトの名無しさん [] 2016/11/07(月) 15:00:49.14 ID:3Xim9e5h(1/2) AAS
>>4
C++11以降ならstd::initializer_listが使える

#include <iostream>
#include <initializer_list>
#include <algorithm>

class A {
int a[6];
public:
A(std::initializer_list<int> b) {
std::copy(std::begin(b), std::end(b), a);
}
void print() const {
for (int i : a)
std::cout << i << std::endl;
}
};

int main()
{
A a({10, 4, 2, 8, 5, 66});

a.print();
}
に至ってはもとの質問と全然関係ねーし
22: デフォルトの名無しさん [sage] 2016/11/07(月) 21:26:20.26 ID:Rr8tj+hR(1) AAS
VC++で、マウスオーバーで色が少し変わって、クリックしたら沈んだみたいになる画像ボタンを作るにはどうしたらいいですか?
23: デフォルトの名無しさん [sage] 2016/11/07(月) 22:16:57.66 ID:hOJqMng1(4/4) AAS
>>19
まず効率は動的確保を行うnewとunique_ptrより確実にarrayのほうがいい

そして>>4
4(3): デフォルトの名無しさん [sage] 2016/11/07(月) 09:27:53.95 ID:vooGYje+(1) AAS
前スレ>>999再掲
class A{
int a[2];
A(int b[])
:a(b) //error
{}
};

この:a(b)ってなにか書き方ありますか?

前スレ>>1000
無理でした・・・
の要求はコードから明らかに固定長でいいと言ってる
これは私の勝手な主張ではなく元の要求がそうなってる
目的を達成するために非効率な動的確保は必要ない

私はアクセス違反になるといったが動的確保にしろとは言っておらず、動的確保にしたのはそっちが勝手にやったこと
アクセス違反を回避するために動的確保にするのは全く割に合わない
だったら長さチェックすればいいだけ
24: デフォルトの名無しさん [sage] 2016/11/07(月) 22:20:22.76 ID:JXtVbtZ4(1) AAS
>>21で結論でてるじゃねえか
C+11を押し付けてる時点でおまえら全員ダメだ!
25: デフォルトの名無しさん [sage] 2016/11/07(月) 23:34:44.46 ID:lMECrzfj(1) AAS
いいぞ、もっとやれ〜♪
26: デフォルトの名無しさん [sage] 2016/11/08(火) 00:32:16.33 ID:t0HdCoBm(1) AAS
沸点低すぎワロタw
27: デフォルトの名無しさん [sage] 2016/11/08(火) 00:33:05.07 ID:2SYrs2Uf(1) AAS
>アクセス違反を回避するために動的確保にするのは全く割に合わない
こう書かれるべきものが
>>16
>それのコードは非効率にしかならないと思うよ
と書かれたため>>19が射精した

特に「非効率にしかならない」の「にしか」という表現が前後の繋がりを考えると最悪だ
28
(1): デフォルトの名無しさん [sage] 2016/11/08(火) 15:38:54.44 ID:FW358liz(1/3) AAS
using std;
int main() {
int a;
cout<< "数を入力してください" <<endl;
cin>> a;
cout<<a <<"ですね?" <<endl;
}
aを確実に入力させたくて困っています
ご教授ねがいます
29: デフォルトの名無しさん [sage] 2016/11/08(火) 16:03:34.41 ID:j/2yZvJO(1) AAS
まず確実ってなんやねん
数以外だったり未入力は弾くってか
30: デフォルトの名無しさん [sage] 2016/11/08(火) 16:26:08.25 ID:FW358liz(2/3) AAS
そうです
未入力で無限ループみたいに表示されて困っています
31: デフォルトの名無しさん [sage] 2016/11/08(火) 16:26:29.50 ID:Or+T0geg(1) AAS
教示ならしてやっても良いが、教授はお断りだ
32
(1): デフォルトの名無しさん [sage] 2016/11/08(火) 16:58:49.59 ID:sBMnjDSh(1) AAS
>>28
外部リンク:ideone.com

一応単なる改行や数字で始まらない文字列は弾くようにした
ただしコメントにも書いてあるけど 123def みたいな数字で始まる文字列を
入力したときは数字だけ返すんでそれが駄目なら自前で作るしかないね
33: デフォルトの名無しさん [sage] 2016/11/08(火) 17:22:56.70 ID:FW358liz(3/3) AAS
>>32
getline知りませんでしたが何とかできそうです
ありがとうございます
34
(3): デフォルトの名無しさん [sage] 2016/11/10(木) 10:52:07.29 ID:8ULjF/bN(1/8) AAS
独習C第4版 P197ページの再帰のプログラムなのですが、
#include <stdio.h>

void recurse(int i);

int main(void)
{
recurse(0);

return 0;
}

void recurse(int i)
{
if(i < 10) {
recurse(i + 1);
printf("%d " , i);
}
}

実行結果は
9 8 7 6 5 4 3 2 1 0

の動作がわかりません。10になるまでprintfが実行されずに+1され続けるのはいいのですが、
なぜ10になったらiが戻り始めるのでしょうか?
あまりに初心者な質問ですみません。
35
(2): デフォルトの名無しさん [sage] 2016/11/10(木) 11:03:28.04 ID:6ImFpJhK(1/3) AAS
引数だけ書くと
0+1
1+1
・・・
9+1
ここまではprintfまで来ないまま再帰
9+1でifに入らないからrecurseからリターン
printfがiを表示(9)してリターン
printfがiを表示(8)してリターン
の繰り返し
36
(1): 34 [sage] 2016/11/10(木) 11:07:42.28 ID:8ULjF/bN(2/8) AAS
>>35
早速のレスありがとうございます。

>9+1でifに入らないからrecurseからリターン
ということはmain関数のreturn 0でプログラムは終了してしまうのではないですか?
なぜprintfが呼ばれるのかわからんのですが。(iが減算される理由もわかりません)
37
(2): 34 [sage] 2016/11/10(木) 11:12:33.48 ID:8ULjF/bN(3/8) AAS
if(i < 10) {
recurse(i + 1);
printf("%d " , i);
}

recurseとprintfは同じifブロックに入っているので、ifが偽なら両方共スキップされると思うのですが、
なぜprintfだけ呼ばれるのでしょうか?
38
(1): デフォルトの名無しさん [sage] 2016/11/10(木) 11:20:27.66 ID:69ogPHI/(1/4) AAS
丁度再帰打ち切り付近の挙動

i=8 で受けた recurse
 recurse(8+1) の呼び出し
 i=9 で受けた recurse
  recurse(9+1) の呼び出し
    i=10 で受けた recurse
    条件合致せず戻る
 printf("%d", i) で 引数の 9 を書く
 i=9 で受けた recurse から戻る
printf("%d", i) で 引数の 8 を書く
i=8 で受けた recurse から戻る
39
(1): デフォルトの名無しさん [sage] 2016/11/10(木) 11:28:04.25 ID:6ImFpJhK(2/3) AAS
>>37
9+1で入って偽で抜けたら
8+1で入ってきたif内のrecurseから抜けて次のprintfが実行されて抜ける
8+1で抜けたら7+1で入ってきたif内のrecurseから抜けて次のprintfが実行される
の繰り返し
40
(2): 34 [sage] 2016/11/10(木) 11:40:24.95 ID:8ULjF/bN(4/8) AAS
>>35-39さん
どうも再帰関数とforループがごっちゃになっていたようです。
何となくわかりました。
後は自分で考えてみます。
どうもありがとうございました。
1-
あと 962 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.027s