【初心者歓迎】C/C++室 Ver.101【環境依存OK】 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
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/
2017/07/28(金) 15:02:04.83ID:IiZPJKRx
ありがとうございます。
いっぺんに書くんじゃなくて行を増やして書けばよかったんですね(´エ`)
2017/07/28(金) 21:22:15.86ID:HyK7cEQc
> char z[] = { "abcde" };
こんな初期化初めて見た
奥が深いな
131デフォルトの名無しさん
垢版 |
2017/07/29(土) 01:30:09.73ID:wXH6c2tF
mapで、あるvalueを持つpairだけを別のmapに移す時はどうやればよいでしょうか?

例えば
unordered_map<int, int> map1{
  {0, -10},
  {10, -1},
  {2, 5},
}
があってvalueが負のもの({0, -1.}と{10, -1})をmap1から削除して
map2へ移す、みたいな場合です。
2017/07/29(土) 02:13:30.18ID:NWxouBfw
C++14まではmapの要素を直接付け替えることはできないのでそのまま
1 ループやalgorithmで該当する要素を見つける
2 その要素のキーと値でmap2に新しい要素を追加
3 古い要素をmap1から削除
4 該当する要素がなくなるまで1-3を繰り返す
2017/07/29(土) 08:10:20.47ID:HavpCAcr
>>131
std::remove_copy_if を使うのが一番簡単な方法だと思う。

std::remove_copy_if(std::begin(map1), std::begin(map2), std::inserter(map2, std::end(map2)), [](decltype(map2)::value_type x) { return x.second < 0; });

みたいな感じ。
2017/07/29(土) 08:18:43.60ID:MwwfsD4U
C++のSTLってこういうの好きだけど
ベタに書いた方が絶対楽だよな・・
2017/07/29(土) 08:21:23.24ID:zJVnUUbX
あとから見てこれなにやってるんだっけ?
ってなりそうで怖い
2017/07/29(土) 08:24:46.31ID:HavpCAcr
>>134-135
こういう場合に for で回した方がいいというタイプの人は go に移行した方が幸せになれると思う。
2017/07/29(土) 08:27:01.28ID:N+YJafLA
forで回した方が良い
2017/07/29(土) 08:30:04.61ID:MwwfsD4U
あとエラるもんなら
とんでもない量の
コンパイルエラー吐くんだよな
もうアホかと
2017/07/29(土) 08:32:03.69ID:wXH6c2tF
>>132
ありがとうございます。
http://ideone.com/l4I4Kt
こういう感じでループ回しているときに削除するとうまく行かないので聞いてみました。
イテレータでもうまくいかなくて。

>>133
algorithm使うんですね。こういう書き方知らなかったです。
2017/07/29(土) 09:29:15.29ID:USfv5Coy
>>135
for文のほうがなにやってるかわからんわ
標準なら何やってるかわからなくてもググれば挙動がわかる
どっちにしても、わかりにくいものは構造化して名前をつけるべきだけどね
2017/07/29(土) 09:35:15.24ID:HavpCAcr
せやな。
名前重要。
2017/07/29(土) 09:46:53.19ID:tkUDhhFx
>>139
イテレータを使うならこんな感じ
eraseの返却値をイテレータの更新に使う
http://ideone.com/PysLw5
2017/07/29(土) 10:19:10.90ID:zJVnUUbX
>>140
分かりにくいか?
for(auto pair: map1){
if(pair.second < 0){
map2.insert(std::pair<int,int>(pair.first, pair.second);
}
}
for(auto pair: map2){
map1.erase(pair.first);
}
2017/07/29(土) 11:11:01.24ID:cYfk9kB4
お題改変野郎おつ
2017/07/29(土) 11:14:07.65ID:zJVnUUbX
>>144
ん?
どこか違うっけ?
2017/07/29(土) 11:15:51.26ID:bre1+bmg
>>143
うん
そんなコードがプルリクされたらreplace to stl functionとだけ書いて突き返すよ
2017/07/29(土) 11:17:44.82ID:cYfk9kB4
>>145
>for(auto pair: map2){
2017/07/29(土) 11:19:40.37ID:bre1+bmg
てかpairなんて変数名使うなよ
誰か頭おかしいやつがusing namespace stdしたらどうすんだよ
2017/07/29(土) 11:21:58.56ID:bre1+bmg
てか細々とひどいね
こんな短いコードでよくもまぁ無能をここまで晒せるなと思う
2017/07/29(土) 11:23:44.04ID:zJVnUUbX
>>147
意味わからん
ひょっとしてコード読めてない?
2017/07/29(土) 11:26:00.62ID:zJVnUUbX
>>148
なんの問題もないけど?
って思ったらいちゃもんしかつけられない奴かよ w
2017/07/29(土) 11:29:49.09ID:USfv5Coy
>>151
make_pair知らないの?
なんでコピーコンストラクタ使わないの?
てかemplace知らないの?

ifのステートメントの中がひどい
2017/07/29(土) 11:57:02.87ID:ODSH1Ehs
ことごとく的はずれな指摘で笑たわ
2017/07/29(土) 12:12:55.39ID:cYfk9kB4
>>150
お前アルゴリズムとか論理に弱いだろw
2017/07/29(土) 12:15:08.54ID:14mINgXT
プログラム板ってみんなこんな感じなの?
とりあえずバカにする
みたいな
2017/07/29(土) 12:16:28.94ID:qNmrQnXF
せやで
2017/07/29(土) 13:01:38.77ID:MwwfsD4U
>>146
なぜ?その理由は?
書くならそこまで書けよ無能
2017/07/29(土) 13:20:13.10ID:FYOlqRfm
>>157
わけわかんないオレオレコードより、テスト済みの標準ライブラリ関数のほうが信頼できるから
2017/07/29(土) 13:24:20.64ID:14mINgXT
安易にライブラリを使うから、パフォーマンスがどんどん悪くなるんだな
2017/07/29(土) 13:47:21.71ID:E5EEKRTu
>>155
自分の知識目一杯使って的はずれなマウンティングしてる奴がいるだけ w
2017/07/29(土) 15:25:53.36ID:wF9WnZrE
あと、自分がコメントできそうな話題になるとここぞとばかりに知識を披露しようとして、
主題からずれたことを言い出したり、
さらにそれに間違いがあって余計なツッコミや攻撃的コメントを呼び込むのも
よく見る風景。
2017/07/29(土) 15:47:58.67ID:0zBFZ9bK
さほど広い範囲を読んでるわけじゃないけど、
C++関連は特に殺伐としてる感じはあるな。
2017/07/29(土) 15:56:27.65ID:gp3BUyJn
>>160 ←こういうのもマウンティングだよな。
164デフォルトの名無しさん
垢版 |
2017/07/29(土) 16:15:28.13ID:mj0H/MXI
>>159
まずは意図が伝わるようにと言う意味でシンプルに書くことが重要。
標準ライブラリ使用は最低限のマナー。

チーム開発してると、上記を踏まえずオレオレ判断でパフォーマンスガー言っている人が、一番迷惑なんだよね。
2017/07/29(土) 16:53:05.23ID:V9CC1YIs
仕事だとメモリ効率や実効速度より開発効率が優先されるからな
2017/07/29(土) 16:56:37.35ID:USfv5Coy
パフォーマンスどうこうで、標準ライブラリ使わなくても許されるのは、mkl開発チームとか、eigenのコミッターレベル
2017/07/29(土) 17:01:43.15ID:E0esoNX5
>>164
>まずは意図が伝わるように
ならお前、>>133が何してるか説明出来るんだよな?
2017/07/29(土) 17:07:45.04ID:zJVnUUbX
>>163
鏡見た方がいいと思うよ w
2017/07/29(土) 17:18:24.12ID:WkR4K9lF
>>167
>>133はすげーわかりやすいだろ
170デフォルトの名無しさん
垢版 |
2017/07/29(土) 17:19:42.35ID:mj0H/MXI
>>167
それが元ネタかー!

すみませんでした _orz
無理っていうか、>>143でおk派ですw
171デフォルトの名無しさん
垢版 |
2017/07/29(土) 17:20:19.90ID:mj0H/MXI
てか、パフォーマンス関係ねー
2017/07/29(土) 17:24:23.71ID:E0esoNX5
>>169
答えられないから回答を逸らすんですねわかります
まさか「あるvalueを持つpairだけを別のmapに移す」なんて言わないことを祈る
173デフォルトの名無しさん
垢版 |
2017/07/29(土) 17:26:24.48ID:mj0H/MXI
ん?
でも、よく見たら>>133割りとわかりやすいじゃん?
今、スマホの小さい画面で改行が多いから面食らったけど、2行(かな?)でみれば、とてもシンプルで意図も読み取れるわ。
174デフォルトの名無しさん
垢版 |
2017/07/29(土) 17:30:02.48ID:mj0H/MXI
ちょっとテンパったけど、そのレベルなら正直どっちでも構わないな。
コメントがあれば。
2017/07/29(土) 17:50:22.46ID:E0esoNX5
>>144
どう見ても>>133の方が酷いお題改変なのだが
それをさしおいて>>143に指摘とはこれ如何に
2017/07/29(土) 17:53:27.93ID:14mINgXT
>>165
どうでも良いことにこだわってるあたり、
開発スピードが速いようには見えないなあ
177デフォルトの名無しさん
垢版 |
2017/07/29(土) 21:53:58.73ID:JdwUdvlQ
>>127
亀だがバイナリ書き込みは後で読み込むときに構造情報が欠けてることが多いからできれば避けたほうがいい
abcde が可変長になりそうなところとかな
2017/07/29(土) 23:46:27.56ID:HavpCAcr
個人的には BENCODE がなかなかいいんじゃないかと思ってる。
2017/07/30(日) 12:35:48.46ID:GR0hOB2I
>>177
>バイナリ書き込みは後で読み込むときに構造情報が欠けてることが多い
欠けているのは>>177の知能だろ
180デフォルトの名無しさん
垢版 |
2017/07/30(日) 17:25:43.33ID:w5RmXCUD
enum EMFType
{
MF_INT, // 符号付き整数
};

// いろいろなデータを1つの関数で表示します
void MultiFunc(EMFType type, unsigned int data)
{
switch(type)
{
case MF_INT : cout << (int)data << endl; break;
}
}

int main()
{
int a = -10;

MultiFunc(MF_INT , a);
return 0;
}

実行結果
-10

unsigned int にマイナスの値を渡してるんですが、そのまま出力されます。
これが仕様だとすると、パラメーターにunsigned int を指定する意味はなんなんでしょうか?
2017/07/30(日) 18:36:26.80ID:wjBL4Xoh
>>180
http://codepad.org/kjSkQNMa
これが望みの解かどうかはわからないが
2017/07/30(日) 18:49:49.76ID:xziOu8cb
>>181
なんでcoutでintにキャストしてんの
2017/07/30(日) 18:54:45.98ID:aW4ocSFO
>>180
MultiFuncを作った人にきけば?
2017/07/30(日) 18:57:01.02ID:wjBL4Xoh
>>182
>>180 に聞いて
185デフォルトの名無しさん
垢版 |
2017/07/30(日) 20:43:43.49ID:w5RmXCUD
>>181
ありがとうございます。コンバイラかバージョンの問題ですかね。

>>182
http://www7b.biglobe.ne.jp/~robe/cpphtml/index.html
ここで勉強してたら出てきたんですが、完全には書いてること理解できてないんで何でかはわかりません。
2017/07/30(日) 20:54:24.26ID:1HGPNMYb
>>180
cout時にintにcastしているからでは?
2017/07/30(日) 21:21:54.63ID:wjBL4Xoh
>>185
よく見てくれ,cout << (int)x
の (int) のキャストが問題となっている,なぜ (int) のキャストをしているのかは読み取れないが
2017/07/30(日) 21:40:38.31ID:K4rJr1Oo
>なぜ (int) のキャストをしているのかは読み取れないが
ふむふむ、これがイケヌマと言う奴だな
2017/07/30(日) 21:42:16.93ID:IhAKIxVt
オマエ読み取れたの?
2017/07/30(日) 21:46:15.66ID:K4rJr1Oo
これが読み取れない者はC/C++より国語の勉強をした方がよいのではないか
2017/07/30(日) 21:49:30.37ID:9ZftmVJd
業務ではよくあるよ。

バグか仕様か分らないっての。書いた本人は既にいなくて誰も答えを知らない。
2017/07/30(日) 22:21:43.69ID:pLyoXQEm
どこの業務だよ。仕様残せよ
2017/07/30(日) 22:28:24.05ID:aW4ocSFO
型消し、type eraserだから、データ構造に意味が無ければ、悪い設計だろう。
2017/07/30(日) 22:31:00.66ID:ynobldaf
>>190
で、なぜキャストしてるの?
読み取れた結果を披露してちょ
2017/07/30(日) 22:31:49.27ID:K4rJr1Oo
>type eraser
まさか、type erasureのつもりだった!?
2017/07/30(日) 22:37:32.57ID:aW4ocSFO
>>195
間違えました。すみません。
2017/07/30(日) 22:38:07.55ID:K4rJr1Oo
>>194
パラメーターの型は適当に決めたもので、EMFTypeで指定されたint型で取り出すのが目的だからだろう
「いろいろなデータを1つの関数で表示します」と書かれているのだから

イメージは↓
https://wandbox.org/permlink/WhWaxSM5nHZdAj9n
2017/07/30(日) 22:42:59.84ID:aW4ocSFO
そのインターフェース、なんか意味があるの?
2017/07/30(日) 22:49:59.18ID:hW0bjdhb
type erasureは意味違うけどね
2017/07/30(日) 23:12:02.27ID:K4rJr1Oo
これはきっとロベールさんが知恵を絞って考えた、徐々に発展していく例題だったに違いない
と思って調べたら単なる型変換の説明だった
201デフォルトの名無しさん
垢版 |
2017/07/30(日) 23:35:50.02ID:w5RmXCUD
>>187
すいません、よく見てませんでした。
unsigned intでひっくりかえった値はintでキャストしなおすと元に戻るんですね。勉強になります。
2017/07/31(月) 00:05:24.36ID:rlOfWFsH
int ⇔ unsigned intだからそれ程でもないけど
たかが型変換と思って単純そうに見えて実は深い
2017/07/31(月) 04:51:20.26ID:eXoHYgix
もしかしてunsigned int a = -10が10だと思ってるじゃ
2017/07/31(月) 07:41:44.42ID:2pZH8HVB
>>184
ごめんアンカミスだ
2017/07/31(月) 08:13:27.51ID:QJrBCtHy
unsigned intとintの変換って戻る保証あったっけ?
教えてエロい人
2017/07/31(月) 09:37:11.53ID:8MdXXwK/
ない
2017/07/31(月) 10:27:16.23ID:b0IxVlKH
そうなの?
補数表現が違うと戻らなくなるんだっけ?
2017/07/31(月) 12:46:28.35ID:oDbItPw6
いつもの
・現実にはダメな処理系はない
けど
・仕様では保証されない
って奴じゃね?
2017/07/31(月) 17:41:18.97ID:ULiYNE/a
この速さなら言える
unsigned intが分からない
少なくともunsignedの-10が10じゃないことは分かった
2017/07/31(月) 17:52:47.90ID:4+hbusvk
俺もunsignedに負数を代入した場合
どーなるのかわかってなかったわ
つーか、そんな処理入れる機会なくね?
わざわざバグったコード書いて
どうなるんですかって聞いているようなもん
2017/07/31(月) 18:12:00.47ID:tXq0mJzu
intが32ビットの整数と仮定すると、
-1==0xFFFFFFFF。
これに1を足すと、オーバーフローして
0==0x00000000
となる。
-2は-1==0xFFFFFFFFよりも1だけ小さいので0xFFFFFFFEだ。
2017/07/31(月) 18:19:04.62ID:RCGkVO1K
処理系依存な内容とそうじゃない内容はちゃんと区別しよう
2017/07/31(月) 18:23:58.10ID:2pZH8HVB
>>209,210
仮にこの範囲の整数を扱える型(X型)があったとすると
-4 -3 -2 -1 0 1 2 3 4
unsigned X型はこの範囲を扱える
0 1 2 3 4 5 6 7 8

X型の-1は-1
unsigned X型の-1は8になる

同じ数だけ(この場合9つ)表現できるのは変わらず
unsignedは最小値が0になる
2017/07/31(月) 19:07:02.18ID:tXq0mJzu
符号つき(signed)の値の場合、一番上のビット(最上位ビット)を符号として扱う。そういう決まりになっている。
例えば、0x80000000は一番小さい符号つき32ビット整数になり、0x7FFFFFFFは符号つき32ビット整数で一番大きな数になる。
2017/07/31(月) 19:16:13.46ID:ULiYNE/a
こんなに一生懸命説明してくれてるのにわからない俺…
すんませんした
2017/07/31(月) 19:18:53.66ID:aK6EDhQb
>>214
そんな事は決まってない
そういう処理系が多いってだけ
2017/07/31(月) 19:18:53.77ID:tXq0mJzu
-30は、-1==0xFFFFFFFFよりも29だけ小さい数だ。29==16+8+4+1==0x1Dだから、-30==0xFFFFFFFF - 0x1D==0xFFFFFFE2となる。
2017/07/31(月) 19:19:50.58ID:9Hgupd7z
意外とハマるのはサイズが拡張される場合で

char ch1 = 0xFF;
unsigned char ch2 = 0xFF;

unsigned int int1 = ch1;
unsigned int int2 = ch2;

int1 と int2 は違った値になりよるよ
VCの処理系依存かもしれんが
2017/07/31(月) 19:21:38.34ID:aK6EDhQb
1の補数、2の補数、符号ビット+仮数
言語上はこれだけある

トラップ表現があったりもする
2017/07/31(月) 19:37:10.30ID:tXq0mJzu
自動車やバイクには走行メーターがついているだろう。走行メーターは0〜9の何桁でどのくらい走ったかを表す。
9999の次が0000になる場合、9999を-1、9998を-2、と考えるとメーターで足し算・引き算を考えることができる。各桁が0〜9になるから、メーターの場合は10進数表示になるがね、
コンピュータの場合は2進数や、16進数で考えることが多い。
2017/07/31(月) 19:41:04.34ID:tXq0mJzu
2進数の場合は各桁が0か1になり、2で次の位に繰り上げ。16進数の場合は各桁が0〜9、A〜Fのいずれかになり、16で次の位に繰り上げ。
2017/07/31(月) 19:49:09.33ID:aK6EDhQb
いつまで機種依存ネタ続けるつもり?
2017/07/31(月) 20:01:22.25ID:iTQXcHuD
>>220
それは10の補数で負数を表す場合でしょ
そういうアーキテクチャもあるだろうけど、それ以外がありえないわけじゃない
2017/07/31(月) 20:05:38.00ID:9Hgupd7z
だからさわるなって
2017/07/31(月) 21:11:41.06ID:VQaCNCGS
1の補数表現ですか,教科書には堂々と載るんですけど,実際には見たことないね‥
2017/07/31(月) 21:44:09.51ID:zfEccCnj
auto i = -100;
auto u = static_cast<unsigned>(i);
int i2;
std::memcpy(&i2, &u, sizeof(int));

unsigned intを経由してintを取り出す方法はこれしか思いつかなかった
2017/07/31(月) 22:53:45.79ID:SkB3nQWo
触るも何も自演だから嵐が過ぎ去るのを黙って見てるしかないぞ
2017/07/31(月) 23:31:24.17ID:tXq0mJzu
仮想世界の住人たちが全て同一人物の自演に見える病気に名前を付けるとしたら、何にする?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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