X



【初心者歓迎】C/C++室 Ver.101【環境依存OK】 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2017/07/18(火) 07:07:27.20ID:vzMDiUgd
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。

◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。

【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)

前スレ
【初心者歓迎】C/C++室 Ver.100【環境依存OK】
http://mevius.2ch.net/test/read.cgi/tech/1478440682/
0011デフォルトの名無しさん
垢版 |
2017/07/21(金) 01:04:55.21ID:kH4Xa8wr
みなさんありがとうございます
取り敢えず>>7>>8さんのレスを参考に
>>9さんのURLを見て寝ようと思います
迅速な回答ありがとうございました (^○^)
0012デフォルトの名無しさん
垢版 |
2017/07/21(金) 01:15:36.94ID:uK7tgvol
まぁ、あれだよね。
右辺値と右辺値参照の違いを理解できるとスッキリするんだけどね。
0013デフォルトの名無しさん
垢版 |
2017/07/21(金) 02:26:47.25ID:9vgFXXAq
>右辺値と右辺値参照の違いを
>>9のURL先の説明を書いた低能に100回読ませたい
まずこの違いを明確に理解しないと>>7の様なおかしな説明になってしまう
0014デフォルトの名無しさん
垢版 |
2017/07/21(金) 02:39:34.56ID:cbDQlmdo
使う目的が違うの?
0015デフォルトの名無しさん
垢版 |
2017/07/21(金) 02:47:35.89ID:cbDQlmdo
俺の理解では、moveしたいからそのためにmoveができる条件を定義してるだけだと思うけど
コンパイラーがどういう条件の時に右辺値と扱えるかどうかを示すために
それが、参照に&マークを使っているという歴史的経緯でややこしくなってるだけでしょ
0016デフォルトの名無しさん
垢版 |
2017/07/21(金) 02:51:29.22ID:joLx1qFD
まずもって
> lvalueは、名前がある
> rvalueは、名前がない
がおかしいということでは?
0017デフォルトの名無しさん
垢版 |
2017/07/21(金) 07:39:48.91ID:9vgFXXAq
そうだな
「lvalueは、名前がある」という誤った知識を注入されていることもあるが
右辺値(rvalue)についての説明が始まって最後まで右辺値参照の話が無いのは良くないな
0018デフォルトの名無しさん
垢版 |
2017/07/21(金) 07:46:07.93ID:cbDQlmdo
レベルの低いスレだな
0019デフォルトの名無しさん
垢版 |
2017/07/21(金) 07:53:53.57ID:cbDQlmdo
お勧め本の提示ができないばかりか、自分の言葉で説明もできずにただただ罵るだけ
突っ込まれると粗探しをし始める
まぁ、本当に理解してる人間がこんなスレ覗く暇ないわな
0020デフォルトの名無しさん
垢版 |
2017/07/21(金) 08:31:50.37ID:9vgFXXAq
>>15
>参照に&マークを使っているという歴史的経緯でややこしくなってるだけでしょ
&は昔からあるのに、そうなのだろうか。
どちらかというと右辺値・左辺値が右辺値参照・左辺値参照と直交する概念で、
言葉が似ているのに>>10の例にもあるように「右辺値参照かつ左辺値が同時に成り立つ」ことが原因だと思うのだが
0021デフォルトの名無しさん
垢版 |
2017/07/21(金) 08:43:30.27ID:xjFWQMIy
>>19
> お勧め本の提示ができない
>>9の最初のリンクで充分だろ
自分の言葉でとか言うがそこそこ大きな概念だから説明がまともだったとしてもこんなところでとうとうと説明されても困るし>>7-8みたいな中途半端な説明は有害なだけだし
0023デフォルトの名無しさん
垢版 |
2017/07/21(金) 10:43:02.49ID:YiUdVm2o
他言語では見たことが無いな
参照の仕組みが近いのはC#だと思うが右辺値参照の概念は無い

static int X;
static ref int M() { return ref X; }
static void Main () {
 M() = 100;//「M()」実質の左辺値
 ref int x = ref M();//「ref M()」実質の左辺値
 ref int rx = ref x;
 rx++;
 Console.Write(M());//「M()」実質の右辺値
}
0024デフォルトの名無しさん
垢版 |
2017/07/21(金) 11:42:16.76ID:joLx1qFD
他言語では代入演算子でオブジェクトをコピーしたり
まるでオブジェクトを基本型であるかのようにふるまわせる概念が無いからな
なぜなら他言語にはGCが有るからね
GCがあって、オブジェクトは常にnewして使うから
勝手にディープコピーされるとか、そういうことは考える必要がないね
逆にC++はGCが無いから・・・

もしC#で右辺値参照があり得るとしたらstructに関してだが
C#のstructはmoveセマンティクスが必要であるような用途に使うものではないから
やっぱり要らないな
0026デフォルトの名無しさん
垢版 |
2017/07/21(金) 12:22:05.32ID:C+EZcupv
1==1 の結果が 2でも-1でもなく 1 だってのは
仕様書のどこに書いてありますか?
0027デフォルトの名無しさん
垢版 |
2017/07/21(金) 12:25:57.68ID:joLx1qFD
他言語は普通に代入などすれば、基本型はコピーでオブジェクトは委譲だ
C++は普通に代入などすれば、基本型もオブジェクトもコピーだ
で、メタプログラミングの観点から見て、何が起こるかということだな
C++は無駄なディープコピーが発生しやすい仕様なのだわ

C++もnewすれば他言語と同じになるが、GCが無いので常に有効ではない
やはりナマポはクラスでラップして・・・って事になるので
適切にコピーなりmoveなり寿命管理してもらわないと破綻する
0028デフォルトの名無しさん
垢版 |
2017/07/21(金) 12:37:14.45ID:YiUdVm2o
>>26
ほれ
ISO/IEC 9899:2011 6.5.9p3
Each of the operators yields 1 if the specified relation is true and 0 if it is false. The result has type int.
0031デフォルトの名無しさん
垢版 |
2017/07/21(金) 13:49:35.62ID:JOiJxqKd
C99は同じ節の同じ段落にある。
C89は不明だが、もしそんな基本部分が変化してたら大騒ぎになってたはずなので同じだろう。
0032デフォルトの名無しさん
垢版 |
2017/07/21(金) 13:54:13.46ID:YiUdVm2o
>>29
89と内容等価ということになっているANSI/ISO C90を入手した
6.3.9(==,!=)は6.3.8(大小比較)を参照していてそこには
yields 1 if the specified relation is true
とある
つまり1になる
0034デフォルトの名無しさん
垢版 |
2017/07/21(金) 19:19:00.46ID:6hIUsyMM
>>24
GC 関係ないわな

> 勝手にディープコピーされるとか、そういうことは考える必要がないね

> C#のstructはmoveセマンティクスが必要であるような用途に使うものではないから

なぜか自信満々で頓珍漢な思い込みを披露されてもな
0035デフォルトの名無しさん
垢版 |
2017/07/22(土) 01:20:33.15ID:oqulLxLp
into sokuに1か2以外を入力したとき1か2を入力されるまでループさせるのをやってみたいんですが
scanf("%d", &soku);
while (soku != (1 || 2)) {
printf("もう一度入力してください。\n希望する 1\n希望しない 2\n");
scanf("%d", &soku);
}
こう書くと2を入力してもループしてしまいます。
1か2が入力されたらループを抜けるにはどう書けばいいんでしょうか?
0039デフォルトの名無しさん
垢版 |
2017/07/22(土) 01:40:28.07ID:ewNbHc5x
!(soku == 1 || soku == 2)     (1 または 2 )ではない
⇒ soku != 1 && soku != 2   1ではない かつ 2ではない
0040デフォルトの名無しさん
垢版 |
2017/07/22(土) 01:47:45.17ID:oqulLxLp
いろんな書き方もできるんですね!
勉強になります。ありがとうございます。
0044デフォルトの名無しさん
垢版 |
2017/07/22(土) 14:51:10.38ID:ewNbHc5x
>>43
ビット演算のor ではなく、真偽判定の論理和なので
1の真偽を求めて真 ⇒ 1
(2の真偽を求めて真 ⇒ 1 : or 結合のショートサーキットで判定しなけど便宜的に)
こうなる
0047 ◆QZaw55cn4c
垢版 |
2017/07/22(土) 18:27:01.28ID:Yr9CVNZl
>>42
いつも不思議に思うのだが、このド・モルガンは議論のスタートとなる公理なの?
それとも、なんらかの公理から導かれる定理なの?
教科書の最初の方でカップハットをやらされる度に思う疑問です
0049 ◆QZaw55cn4c
垢版 |
2017/07/22(土) 18:41:59.88ID:Yr9CVNZl
>>48
それは集合が有限個の場合
集合が無限個の場合はどうなる?公理じゃないとうまくいかないんじゃない?
0050片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/07/22(土) 18:48:30.61ID:WTRjQogU
無限集合の場合は集合の内包的定義により、離散的な論理学に還元され、やはり成り立つ。
0051デフォルトの名無しさん
垢版 |
2017/07/22(土) 18:50:49.49ID:Yr9CVNZl
>>50
稠密な実数の世界のもとでも、それはいえるの?
われわれの解析学の世界では、まず実数からスタートするんです
0052片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/07/22(土) 18:57:46.94ID:WTRjQogU
A={ x | x ∈A }.
B={ x | x ∈B }.
A∩B={ x | x ∈A ∧ x∈B }.
このように、集合の元の存在は論理学に還元される。
0053片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/07/22(土) 19:05:08.09ID:WTRjQogU
論理学の真理値表→論理学のド・モルガンの定理→集合論のド・モルガンの定理
0054 ◆QZaw55cn4c
垢版 |
2017/07/22(土) 19:09:10.20ID:Yr9CVNZl
>>52
ん、それって A, B, C ‥と数えられる世界の中では、いずれ到達できると思う。
でも、力学とか解析学とかをやるときは、ぎっしりつまった実数を相手に論理を組むよね
実数を相手に考える世界では、かぞえられる、とかいう性質を前提にしてはいけないんだと思うよ

まあ立場の問題かもしれない、計算機は数えられる世界で考えればいいことなのかもしれない

いま読んでる教科書の最初の方での∀∃∩∪を読むたびに思うのです
よく「証明は読者の演習としよう」で苦しむのです、これ、やめて欲しいんですけどね
∩∪の羅列である命題にドモルガンを振り返るときれいに解決するのですが
そんなことでいいのだろうか、と常々思っているのでした
0055片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/07/22(土) 19:16:19.03ID:WTRjQogU
何も数えていないぞ。
x∈Aというのはxの性質を表しただけだ。
集合論の内包的定義を否定するのか?
0056 ◆QZaw55cn4c
垢版 |
2017/07/22(土) 19:19:02.26ID:Yr9CVNZl
>>55
分割して分割して最後に行き止まりがあるから、その推論はなりたつと思うんです
でも分割して分割して分割して‥終わりがない場合には、その推論は成り立つのでしょうか?
成り立つものとして仮定しているだけなんじゃないでしょうか?
0057片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/07/22(土) 19:32:50.77ID:WTRjQogU
集合論で、無限演算(極限)が必要になることは少ない。無限集合においても扱う性質が有限であることが多いからだ。
0058片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/07/22(土) 19:38:35.09ID:WTRjQogU
無限集合では、1つ1つ数えるのではなく、性質(述語)に着目する。集合は述語の組み合わせで表せる。
取り扱う集合を表す述語が有限の表現で表せないなら、人間はそれを考えることすらできないだろう。
0059片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/07/22(土) 19:47:57.23ID:WTRjQogU
そんなに気になるなら、疑問をなくすために本格的に数学者になって『集合の極限に関する研究』という本を出版してはいかがか。
0062片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/07/22(土) 20:27:14.25ID:WTRjQogU
A={ x | x ∈A }. B={ x | x ∈B }.
A∩B={ x | x ∈A ∧ x∈B }.
A∪B={ x | x ∈A ∨ x∈B }.
~A={ x | ¬(x∈A) }.
~(A∩B)={ x | ¬(x ∈A ∧ x∈B) }.
~A∪~B={ x | ¬(x ∈A) ∨ ¬(x∈B) }.
ここで、¬(x ∈A ∧ x∈B)={ x | ¬(x ∈A) ∨ ¬(x∈B)を証明すれば、
~(A∩B)=~A∪~B と言える。
0063片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/07/22(土) 20:34:24.27ID:WTRjQogU
ここでα=(x∈A)、β=(x∈B)とおけば、命題α、βによる命題論理学のド・モルガンの定理に還元される。
α、βについて真理値表を作れば、容易に命題論理学のド・モルガンの定理が証明できる。□
0064片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/07/22(土) 20:38:22.42ID:WTRjQogU
>>62
訂正。
(誤) ここで、¬(x ∈A ∧ x∈B)={ x | ¬(x ∈A) ∨ ¬(x∈B)を証明すれば、
(正) ここで、¬(x ∈A ∧ x∈B)=¬(x ∈A) ∨ ¬(x∈B)を証明すれば、
0065 ◆QZaw55cn4c
垢版 |
2017/07/22(土) 20:47:11.33ID:/Wnz58+R
>>59
いや,手持ちの本が読めれば十分なので(今はその部分は結論ありきで読み飛ばしている)追求しようという意図はない
ていうか,たぶん,そうやって読まないといけない(そうじゃないと進めない)

でも,ド・モルガンは定理じゃなくて公理じゃないのかなって「感じる」んですよ
これは私だけの気のせい?多分気のせいなんだろうな‥ごめんね
0066片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/07/22(土) 20:47:54.26ID:WTRjQogU
集合の極限というと、
S=f(X_0)∪f(X_1)∪...∪f(X_n)∪...
みたいな感じか?
自明ではないが、つまらないな。
0067デフォルトの名無しさん
垢版 |
2017/07/22(土) 21:04:17.39ID:Xt0MBnGT
>>58は健常者の様な発言なのに、
スレをツイッターと勘違いしているかのようなクソレス連投が残念だ
0068片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/07/22(土) 21:09:55.19ID:WTRjQogU
君の公理系では公理かも知れない。ただZFCで証明されるものであるから、定理と言った方がいい。
0069 ◆QZaw55cn4c
垢版 |
2017/07/22(土) 21:15:06.91ID:/Wnz58+R
>>66
https://www.amazon.co.jp/dp/4320014731
最初の方だが,すでに∞前提
演習
(1)(∪_{n=1}^∞ An)∩A = ∪_{n=1}^∞(An ∩A)
(2)(∩_{n=1}^∞ An)∪A = ∩_{n=1}^∞(An ∪A)
どちらか一方だけ証明できたら,残りはドモルガン採用ですっとばしているが,ドモルガンが∞にも使えるか迷いがある
0071片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/07/22(土) 21:25:41.26ID:WTRjQogU
集合であることの定義にまでさかのぼって、well-definedであることを確認すればいい。
0073片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/07/22(土) 21:36:21.21ID:WTRjQogU
整数の無限大は整数ではない。
整数の全体集合は無限の濃度だが、集合としてwell-definedである。
このように、極限については個別に存在を確認する必要がある。
0074 ◆QZaw55cn4c
垢版 |
2017/07/22(土) 21:41:01.35ID:/Wnz58+R
うん,確かにこの場合は自然数の無限だから可算個だね,ちょっと今までの私の話とは事情が違う,なかなかいい例が思い浮かばないね‥
0083デフォルトの名無しさん
垢版 |
2017/07/24(月) 18:34:08.77ID:3yF9COr6
>>48
違う。通常公理系から証明する。

>>50
違う。可算加法性は自明な性質ではない。

>>57
解析学は非可算無限、整数論は可算無限を扱う
無限集合を扱うのは一般的
むしろ有限集合を扱うほうが特殊

>>58
ソボレフ空間とかガン無視かよ



めんどくさいからこのくらいで
ほぼすべてのレスに間違いが含まれてる
0089はちみつ餃子 ◆8X2XSCHEME
垢版 |
2017/07/24(月) 22:07:17.47ID:Gxl+AYGO
>>47-50
やりたければ公理にした系を考えてもええんやで。
でもまあこのスレの話題として必要なのは手書きで真理値表を書けるレベルの狭い世界の論理だろう、JK
0090デフォルトの名無しさん
垢版 |
2017/07/24(月) 22:49:36.92ID:9ObWd1Q9
論理回路とかでまともな無限元のブール代数教えるとこなら、
交換、結合、単位元、補元の公理から証明する手順教える。
0092デフォルトの名無しさん
垢版 |
2017/07/25(火) 10:10:52.25ID:OkhRIGg6
operator[](int n) をその定義されてるクラス自身で呼び出すにはどうしたらいいんですか?
0094デフォルトの名無しさん
垢版 |
2017/07/25(火) 10:49:24.51ID:OkhRIGg6
サンクスです
0101デフォルトの名無しさん
垢版 |
2017/07/26(水) 03:01:12.72ID:73NCM6AX
int main() {
vector<int> v;
v.reserve(10000);
v.push_back(0);
cout << v.capacity() << endl;
vector<int> (v).swap(v);
cout << v.capacity() << endl;
}
(v).swap(v); の文頭のvに付いてる()は何の意味があるんでしょうか?
0103デフォルトの名無しさん
垢版 |
2017/07/26(水) 04:24:25.95ID:cw7jpAOD
>>101
vector<int> (v)
までで一時オブジェクトをコピーコンストラクトしてるんじゃ?

で、.swap(v) で中身を入れ替えて、コンパクションするっていうサンプルに見える。
未確認で書いてるので、間違えてたらごめん。
0105デフォルトの名無しさん
垢版 |
2017/07/26(水) 15:54:35.58ID:73NCM6AX
>>103
何とか理解できました。ありがとうございます。
0106片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/07/26(水) 20:46:35.22ID:bC5SPfn2
vector<int> (v).swap(v);

>と( の間が離れてるのが、分かりにくい読みづらい、意地悪な点だな。
0108デフォルトの名無しさん
垢版 |
2017/07/26(水) 22:56:52.57ID:vCDZhGQY
int OTL=3;
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況