[過去ログ] 【初心者歓迎】C/C++室 Ver.100【環境依存OK】 [無断転載禁止]©2ch.net (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
12(2): デフォルトの名無しさん [] 2016/11/07(月) 15:00:49.14 ID:3Xim9e5h(1/2) AAS
>>44(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
無理でした・・・
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();
}
13(2): デフォルトの名無しさん [sage] 2016/11/07(月) 18:18:06.75 ID:hOJqMng1(1/4) AAS
>>12
それinitializer_listに6っこ以上与えたら実行時のアクセス違反になる
>>4
C++11以降ならstd::array使うべき
そうすれば普通に書ける
class A{
std::array<int,2> a;
public:
A(const std::array<int,2> &b):a(b)
{
}
};
14: 13 [sage] 2016/11/07(月) 18:21:04.82 ID:hOJqMng1(2/4) AAS
2行目「6個より多く」だったね
15: デフォルトの名無しさん [sage] 2016/11/07(月) 18:44:55.40 ID:3Xim9e5h(2/2) AAS
>>13
いやいくらでも動的に増やせるんだけど初心者スレだから省略した
外部リンク:ideone.com
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ん?
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に至ってはもとの質問と全然関係ねーし
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の要求はコードから明らかに固定長でいいと言ってる
これは私の勝手な主張ではなく元の要求がそうなってる
目的を達成するために非効率な動的確保は必要ない
私はアクセス違反になるといったが動的確保にしろとは言っておらず、動的確保にしたのはそっちが勝手にやったこと
アクセス違反を回避するために動的確保にするのは全く割に合わない
だったら長さチェックすればいいだけ
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が減算される理由もわかりません)
上下前次1-新書関写板覧索設栞歴
あと 966 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.025s