エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります
コードを貼れる所
http://codepad.org/
https://ideone.com/
前スレ
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1530384293/
【初心者歓迎】C/C++室 Ver.104【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
2018/12/28(金) 06:04:52.38ID:ufThBpcD
741デフォルトの名無しさん
2019/03/12(火) 07:35:25.54ID:nPeHxcg9 Cのポインタ型はK&Rのプログラミング言語Cに書いてある通り、単なるアドレスを保持する型じゃなくて配列の仲間なのよ。
例えば
char *cp =“abc”;
で
*(p+1)の様に書くと、ちゃんとcharサイズ分ずらしたアドレスを指してくれる。
その本には
(当時の)優れたプログラマたちがやってた事を言語仕様として取り込んだと、という様な事が書いてあったと思う。
ポインタが示す先の型とサイズやらの心配はC言語では不要だ、すげーだろ?的な。
例えば
char *cp =“abc”;
で
*(p+1)の様に書くと、ちゃんとcharサイズ分ずらしたアドレスを指してくれる。
その本には
(当時の)優れたプログラマたちがやってた事を言語仕様として取り込んだと、という様な事が書いてあったと思う。
ポインタが示す先の型とサイズやらの心配はC言語では不要だ、すげーだろ?的な。
742デフォルトの名無しさん
2019/03/12(火) 07:37:59.58ID:nPeHxcg9743デフォルトの名無しさん
2019/03/12(火) 08:23:28.38ID:xHFKV8QO744デフォルトの名無しさん
2019/03/12(火) 08:29:27.03ID:i1gu3hXZ >>743
ポインタが指す先にいくつ分の領域があるか(いくつ分を参照してよいか)は記録されてないから、プログラマが自分の責任で管理するしかないよ
ポインタが指す先にいくつ分の領域があるか(いくつ分を参照してよいか)は記録されてないから、プログラマが自分の責任で管理するしかないよ
745デフォルトの名無しさん
2019/03/12(火) 08:41:29.44ID:7SPfMi3X >>743
直接長さを示す情報はどこにもないよ
だから、cの「文字列」は単なる文字の配列だけではなく、0終端が必要
>(脱線するけどNULL終端も数えて長さ4?)
その通り
(NULLはnullptrとしてのみ使ったほうがいいよ
混同してないならいいんだけどね)
直接長さを示す情報はどこにもないよ
だから、cの「文字列」は単なる文字の配列だけではなく、0終端が必要
>(脱線するけどNULL終端も数えて長さ4?)
その通り
(NULLはnullptrとしてのみ使ったほうがいいよ
混同してないならいいんだけどね)
746デフォルトの名無しさん
2019/03/12(火) 09:29:32.99ID:nPeHxcg9747デフォルトの名無しさん
2019/03/12(火) 09:32:06.13ID:u0RxZCyH \0終端が来るまで確保されていると想定して受け取り側は動作する
だから終端記号がないと色々まずい
(ので、バッファ長も指示する関数が後から増えた)
だから終端記号がないと色々まずい
(ので、バッファ長も指示する関数が後から増えた)
748デフォルトの名無しさん
2019/03/12(火) 09:32:15.05ID:xVickGeK 便乗質問でごめんやけど
delete [] p;
この場合deleteはどうやってサイズ調べてんの?
delete [] p;
この場合deleteはどうやってサイズ調べてんの?
749デフォルトの名無しさん
2019/03/12(火) 09:33:32.91ID:i1gu3hXZ >>746
char *cpで宣言してるならその計算じゃ配列サイズはとれないよ。
char *cpで宣言してるならその計算じゃ配列サイズはとれないよ。
750デフォルトの名無しさん
2019/03/12(火) 09:33:42.86ID:u0RxZCyH 要素数の算出は
sizeof(配列) / sizeof(配列[0]) または sizeof(配列) / sizeof(*配列)
ではなかろうか?
sizeof(配列) / sizeof(配列[0]) または sizeof(配列) / sizeof(*配列)
ではなかろうか?
751デフォルトの名無しさん
2019/03/12(火) 09:47:35.09ID:Nd0ou12Q 除算は遅いからなぁ
752デフォルトの名無しさん
2019/03/12(火) 10:18:57.28ID:u0RxZCyH コンパイル時に確定する値だから
実行時には定数として埋まってるんでないの?
(ほんとんどの環境で インタープリターはしらんw
実行時には定数として埋まってるんでないの?
(ほんとんどの環境で インタープリターはしらんw
753デフォルトの名無しさん
2019/03/12(火) 10:22:41.05ID:Nd0ou12Q sizeof(配列)は動的でしょう
754デフォルトの名無しさん
2019/03/12(火) 12:15:07.37ID:7lezZ5hH sizeofは演算子だから動的じゃないかな
最適化で消し飛ぶ可能性はあるのかもしれんけど
最適化で消し飛ぶ可能性はあるのかもしれんけど
755デフォルトの名無しさん
2019/03/12(火) 12:42:52.96ID:Gedrqwi7 >>748
実装依存だと思うけど、p[-1]とかに長さが書いてあったりする
実装依存だと思うけど、p[-1]とかに長さが書いてあったりする
756デフォルトの名無しさん
2019/03/12(火) 12:45:54.40ID:xHFKV8QO アンカー長くなるから省略するけど
みなさんありがとう
みなさんありがとう
757デフォルトの名無しさん
2019/03/12(火) 13:32:00.51ID:6Uu2j9Xc インクリメントするときに困る
758752
2019/03/12(火) 14:52:24.67ID:u0RxZCyH VLAのこと完全に忘れてた sizeof(配列) は動的だわ
759はちみつ餃子 ◆8X2XSCHEME
2019/03/12(火) 15:09:12.69ID:tBEUjULM sizeof の結果は動的な判断が必要な場合 (いわゆる VLA) を除いて整数定数であることは保証される。
C++ には VLA は無いので sizeof が動的であるかどうかを心配する必要はないんだけど、
それは置いといて、 C++ で配列の大きさを知りたいときは std::extent の方がよくない?
C++ には VLA は無いので sizeof が動的であるかどうかを心配する必要はないんだけど、
それは置いといて、 C++ で配列の大きさを知りたいときは std::extent の方がよくない?
760デフォルトの名無しさん
2019/03/12(火) 15:29:35.28ID:xWv5Y9zk761デフォルトの名無しさん
2019/03/12(火) 22:48:56.35ID:SU/8eF4+ 昔はstd::extent持ち出したりしたが今はstd::sizeだな
762デフォルトの名無しさん
2019/03/12(火) 23:05:04.16ID:/eUnUFro uint8_t *addrb =(uint8_t *)0x00F00000;
uint16_t *addrw =(uint16_t *)0x00F00000;
*addrb = 0x10;
*addrw = 0xF0F0;
0x00F00000番地に0x10と0xF0F0を書き込むコードらしいのですが、最初の2行がよく分かりません。アドレスが4バイトなのにポインタはそれより小さくて問題ないのでしょうか。右辺のキャストは何を行っているのでしょうか。
よろしくお願いします。
uint16_t *addrw =(uint16_t *)0x00F00000;
*addrb = 0x10;
*addrw = 0xF0F0;
0x00F00000番地に0x10と0xF0F0を書き込むコードらしいのですが、最初の2行がよく分かりません。アドレスが4バイトなのにポインタはそれより小さくて問題ないのでしょうか。右辺のキャストは何を行っているのでしょうか。
よろしくお願いします。
763デフォルトの名無しさん
2019/03/12(火) 23:29:55.31ID:RU0tEwI6764デフォルトの名無しさん
2019/03/12(火) 23:37:26.58ID:y5WX6T5u >ポインタはそれより小さくて問題ないのでしょうか。
*addrb = 0x10;
*addrw = 0xF0F0;
この文を見て上の疑問に到達したのかな?
ポインタは addrb や addrw で その変数の器の大きさはアドレスを格納できる大きさ
*addrb で アドレスにさされた先の内容を示す 内容の大きさはその型による
*addrb は uint8_t 型でおそらく1バイト (1オクテット)
*addrw は uint16_t 型でおそらく2バイト (2オクテット)
*addrb = 0x10;
*addrw = 0xF0F0;
この文を見て上の疑問に到達したのかな?
ポインタは addrb や addrw で その変数の器の大きさはアドレスを格納できる大きさ
*addrb で アドレスにさされた先の内容を示す 内容の大きさはその型による
*addrb は uint8_t 型でおそらく1バイト (1オクテット)
*addrw は uint16_t 型でおそらく2バイト (2オクテット)
765デフォルトの名無しさん
2019/03/13(水) 18:31:26.55ID:yPp5BeL1 ありがとうございます。
理解できました。
そもそもアドレス自身のサイズがあるものと勘違いしてました。
理解できました。
そもそもアドレス自身のサイズがあるものと勘違いしてました。
766デフォルトの名無しさん
2019/03/14(木) 06:41:14.61ID:SGfhnH0M アドレス自身にもサイズはあるけどね。
sizeof(*addrb) == たぶん 1 (8bit)
sizeof(*addrw) == たぶん 2 (16bit)
sizeof(addrb) ... 近頃のPCでは 4 (32bitアドレス) か 8 (64bitアドレス) かのう。
sizeof(*addrb) == たぶん 1 (8bit)
sizeof(*addrw) == たぶん 2 (16bit)
sizeof(addrb) ... 近頃のPCでは 4 (32bitアドレス) か 8 (64bitアドレス) かのう。
767デフォルトの名無しさん
2019/03/14(木) 12:20:30.31ID:Yw9IVRaM メモリ消費についてききたい。
8byteのa,b,cっていう変数と、それを結合した24byteのdっていう変数をクラス内で扱いたいんだけど、素直にやると48byteメモリ消費だよね?
代わりに24byteのdと、8byte型のポインタ(4byte)3つ宣言したら36byteのメモリ消費で12byte/オブジェクトの節約になると思うんだけど、最適化したければ意識するべき?
あるいはコンパイラがその辺は上手にやってくれて最小限のメモリ消費になる?
8byteのa,b,cっていう変数と、それを結合した24byteのdっていう変数をクラス内で扱いたいんだけど、素直にやると48byteメモリ消費だよね?
代わりに24byteのdと、8byte型のポインタ(4byte)3つ宣言したら36byteのメモリ消費で12byte/オブジェクトの節約になると思うんだけど、最適化したければ意識するべき?
あるいはコンパイラがその辺は上手にやってくれて最小限のメモリ消費になる?
768さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/03/14(木) 12:26:16.05ID:1+g2CCuw >>767
ポインタ先をチェック・確保するのにヒープメモリーと計算コストが掛かる。
ポインタ先をチェック・確保するのにヒープメモリーと計算コストが掛かる。
769デフォルトの名無しさん
2019/03/14(木) 13:52:59.75ID:M+miX7Aw770デフォルトの名無しさん
2019/03/14(木) 14:39:59.26ID:3EvgP48J >>767
それ実体の24byteが別に要るだろ…
それ実体の24byteが別に要るだろ…
771デフォルトの名無しさん
2019/03/14(木) 14:43:45.46ID:q8OuUl64 下のソースをコンパイルしてコマンドプロンプト(cmd)で実行すると「鷗」の字が出力されません
int main(int ac, char **av){
setlocale(LC_ALL, "");
fwprintf(stdout, L"[%c]\n", 0x3042); // [あ] と表示される
fwprintf(stdout, L"[%c]\n", 0x9dd7); // [?] と表示される
return 0;
}
同じコマンドプロンプト(同じwindowsインスタンス上)で
python3 からだと(スクリプト経由でもIDEでもどちらも)
print(f'[{0x3042:c}]') # [あ]
print(f'[{0x9dd7:c}]') # [鷗]
表示されます
setlocale(LC_CTYPE, "en_US:utf8");
にしても同じでした
python3 からだと表示出来るということは
fwprintf に問題があるということでしょうか?
int main(int ac, char **av){
setlocale(LC_ALL, "");
fwprintf(stdout, L"[%c]\n", 0x3042); // [あ] と表示される
fwprintf(stdout, L"[%c]\n", 0x9dd7); // [?] と表示される
return 0;
}
同じコマンドプロンプト(同じwindowsインスタンス上)で
python3 からだと(スクリプト経由でもIDEでもどちらも)
print(f'[{0x3042:c}]') # [あ]
print(f'[{0x9dd7:c}]') # [鷗]
表示されます
setlocale(LC_CTYPE, "en_US:utf8");
にしても同じでした
python3 からだと表示出来るということは
fwprintf に問題があるということでしょうか?
772デフォルトの名無しさん
2019/03/14(木) 14:57:23.81ID:tsxAqnNH Windows は、Visual Studio だろ
TCHAR マクロで、sjis/Unicode を切り替える。
Windows用の環境を揃えないと、無理だろ
TCHAR マクロで、sjis/Unicode を切り替える。
Windows用の環境を揃えないと、無理だろ
773デフォルトの名無しさん
2019/03/14(木) 15:10:14.13ID:q8OuUl64 UNICODE
_UNICODE
とかは定義してあります
それに[あ]の方は表示されてるので
TCHAR が char と誤認識とかめっちゃ的外れな指摘だと感じます
_UNICODE
とかは定義してあります
それに[あ]の方は表示されてるので
TCHAR が char と誤認識とかめっちゃ的外れな指摘だと感じます
774デフォルトの名無しさん
2019/03/14(木) 15:25:54.72ID:s2YvJJWc fwprintf
ワイド文字を書き込む場合、ファイルはバイナリー・モードでオープンするか、
o_ccsid または codepage パラメーターでオープンする必要があります。
これにより、ワイド文字に対して変換が発生しないことが保証されます。
ワイド文字を書き込む場合、ファイルはバイナリー・モードでオープンするか、
o_ccsid または codepage パラメーターでオープンする必要があります。
これにより、ワイド文字に対して変換が発生しないことが保証されます。
775デフォルトの名無しさん
2019/03/14(木) 17:04:07.47ID:DMc/T5SW >>767
もしかして windows で 24bitカラーを取り扱いたい話? union で楽する
#pragma pack(push,1)
typedef union {
BYTE e[3];
struct { BYTE B, G, R; };
} BPP24_t;
#pragma pack(pop)
もしかして windows で 24bitカラーを取り扱いたい話? union で楽する
#pragma pack(push,1)
typedef union {
BYTE e[3];
struct { BYTE B, G, R; };
} BPP24_t;
#pragma pack(pop)
776デフォルトの名無しさん
2019/03/14(木) 19:02:32.98ID:wP1B/x23777デフォルトの名無しさん
2019/03/14(木) 19:26:19.44ID:lcdumzgu778デフォルトの名無しさん
2019/03/14(木) 20:21:10.72ID:2vbDdJqi 規格で標準ライブラリ中のメソッドがconst指定されていない場合これをconst指定するのは規格違反ですか?
具体的にはuniform_int_distributionのconstなインスタンスを生成してoperator()(URNG& g)を呼び出すとMSVC(VS2017)のみ通り、gcc4.3.2とclang4.0ではコンパイルエラーになりました
N4140及びN4659を参照した限り、上記のオペレータはconst指定されていませんでした
具体的にはuniform_int_distributionのconstなインスタンスを生成してoperator()(URNG& g)を呼び出すとMSVC(VS2017)のみ通り、gcc4.3.2とclang4.0ではコンパイルエラーになりました
N4140及びN4659を参照した限り、上記のオペレータはconst指定されていませんでした
779デフォルトの名無しさん
2019/03/14(木) 20:28:14.30ID:gIuDI0vP >>776
フレームの組み立ては迷うことなくstructでいいと思うのですがどうでしょう。ちなみにpingではは素直にstructで組み立ててあります。
フレームの組み立ては迷うことなくstructでいいと思うのですがどうでしょう。ちなみにpingではは素直にstructで組み立ててあります。
780デフォルトの名無しさん
2019/03/14(木) 20:30:26.12ID:V4l0GHvB781デフォルトの名無しさん
2019/03/14(木) 21:00:14.82ID:gIuDI0vP >>780
ああ、なるほど。structでガワ作っておいて、ペイロード書き換えてバッファに溜めていくって感じでしかやった事しかないですけどケースバイケースなんでしょうね。
ああ、なるほど。structでガワ作っておいて、ペイロード書き換えてバッファに溜めていくって感じでしかやった事しかないですけどケースバイケースなんでしょうね。
782デフォルトの名無しさん
2019/03/14(木) 21:58:48.11ID:VY0DZD81 コンソールがSJISだから無理
783デフォルトの名無しさん
2019/03/14(木) 23:31:25.66ID:u00Rfoqy C++難しすぎねえか?
こんなの新機能を網羅してる人どんだけいるんだか・・・
こんなの新機能を網羅してる人どんだけいるんだか・・・
784デフォルトの名無しさん
2019/03/14(木) 23:39:23.56ID:CLlwPgIu 奥義を究めると尊敬されます(カモ)
785はちみつ餃子 ◆8X2XSCHEME
2019/03/14(木) 23:47:20.81ID:mXS2OKIJ >>783
別に網羅せんでも使えるところだけ使えば良い。
常に新しい機能を把握しておく必要はない。
使わない方が良い機能というのは有るので、駄目な部分を把握する方が大事だと思う。
(その結果として新しい機能に行きつくこともあるけど。)
新しい機能を使わないと回りくどくなるだけだが、
駄目な機能は致命傷になる (という可能性をコンパイル時にエラーに出来ない) こともあるので。
今の C++ で nullptr でなく NULL を使う理由は全然ない、みたいなのとか。
別に網羅せんでも使えるところだけ使えば良い。
常に新しい機能を把握しておく必要はない。
使わない方が良い機能というのは有るので、駄目な部分を把握する方が大事だと思う。
(その結果として新しい機能に行きつくこともあるけど。)
新しい機能を使わないと回りくどくなるだけだが、
駄目な機能は致命傷になる (という可能性をコンパイル時にエラーに出来ない) こともあるので。
今の C++ で nullptr でなく NULL を使う理由は全然ない、みたいなのとか。
786デフォルトの名無しさん
2019/03/14(木) 23:49:54.51ID:Gk3KilXE てかコンセプトが待ち遠しい
templateの黒魔術っぷりが大幅に改善されるよね
エラーメッセージが分かりやすくなるのが大きい
templateの黒魔術っぷりが大幅に改善されるよね
エラーメッセージが分かりやすくなるのが大きい
787はちみつ餃子 ◆8X2XSCHEME
2019/03/15(金) 00:08:50.55ID:q2a9nFaz コンセプトとモジュールは C++er の悲願って感じだからな……。
今まで土壇場での延期を繰返した経緯を考えると次も本当に入るのか
疑わしい気はするけど。
今まで土壇場での延期を繰返した経緯を考えると次も本当に入るのか
疑わしい気はするけど。
788デフォルトの名無しさん
2019/03/15(金) 02:19:09.67ID:f+LcC8HT 配列のアドレスが表示できません。何が悪いのでしょうか。結果はからになります。
unsigned char a[100];
cout << hex << &a[5] << endl;
unsigned char a[100];
cout << hex << &a[5] << endl;
789デフォルトの名無しさん
2019/03/15(金) 02:52:40.51ID:nvk7uoI+ a+5
790さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/03/15(金) 04:49:34.55ID:CgPhXsZt (void *)
791デフォルトの名無しさん
2019/03/15(金) 06:53:21.47ID:F3jqlZHF >>788
&a[5] は「unsigned char を指すポインタ」なので
cout << では「'\0'で終端する文字列」として表示しようとするのよ。
なもんで >>790 の通り void* にキャストして、
具体的なデータを指さない「単なるアドレス」扱いしてくれと指示。
ちなみに >>789 は効果ないでしょ。
でも C++ の作法としては static_cast<void*>(&a[5]) と
長々しい名前付きキャストを使うべきなんじゃろか。
個人的には static_cast<const void*>(&a[5]) まで書きたいけど。
inline const void *to_voidptr(const void* p) {return p;}
てな具合に、字数を減らすための変換用の関数でも使うか。
…何か標準的で短い書き方があったりするのかしら。
&a[5] は「unsigned char を指すポインタ」なので
cout << では「'\0'で終端する文字列」として表示しようとするのよ。
なもんで >>790 の通り void* にキャストして、
具体的なデータを指さない「単なるアドレス」扱いしてくれと指示。
ちなみに >>789 は効果ないでしょ。
でも C++ の作法としては static_cast<void*>(&a[5]) と
長々しい名前付きキャストを使うべきなんじゃろか。
個人的には static_cast<const void*>(&a[5]) まで書きたいけど。
inline const void *to_voidptr(const void* p) {return p;}
てな具合に、字数を減らすための変換用の関数でも使うか。
…何か標準的で短い書き方があったりするのかしら。
792デフォルトの名無しさん
2019/03/15(金) 08:07:08.74ID:fLDhqMRG 文字はcharだけでsigned/unsignedは整数扱いするとかしてくれりゃよかったのにな。
793デフォルトの名無しさん
2019/03/15(金) 09:38:53.54ID:MV2geWC9 coutなんて使うのが悪い
printf()でおk
printf()でおk
794デフォルトの名無しさん
2019/03/15(金) 10:50:58.56ID:nvk7uoI+ qDebugばっか使ってたからcoutの使い方なんて忘れてたわw
795デフォルトの名無しさん
2019/03/17(日) 06:21:33.06ID:Q6jWm6hE そういえば「cout << &a[5] でアドレス値が表示されない」ってのは
char 系の配列やポインタの場合だけで起きる特殊例なのかな。
ユーザーが operator<<(ostream&, T*) の再定義をしない標準の状態で、
オブジェクトのアドレス値を送ったらアドレス値以外の何かが表示される型って
標準か有名どころのライブラリで、何か知ってる?
char 系の配列やポインタの場合だけで起きる特殊例なのかな。
ユーザーが operator<<(ostream&, T*) の再定義をしない標準の状態で、
オブジェクトのアドレス値を送ったらアドレス値以外の何かが表示される型って
標準か有名どころのライブラリで、何か知ってる?
796デフォルトの名無しさん
2019/03/17(日) 12:02:02.30ID:ZVJiTVd1 operator<<(ostream&, T*) の再定義をしないライブラリで
オブジェクトのアドレス値を送ったらアドレス値以外の何かが表示される型を定義しているものは?
という質問に置き換えてみた
オブジェクトのアドレス値を送ったらアドレス値以外の何かが表示される型を定義しているものは?
という質問に置き換えてみた
797デフォルトの名無しさん
2019/03/17(日) 13:17:40.49ID:4LIjOkKH gccのiostreamのソース辿れば全部書いてあるよ。
>>797
ほう、どこに書いているのかわかってそう言っているのですね、それはすごいですね
ほう、どこに書いているのかわかってそう言っているのですね、それはすごいですね
799デフォルトの名無しさん
2019/03/17(日) 14:22:23.04ID:rD0zueCH800はちみつ餃子 ◆8X2XSCHEME
2019/03/17(日) 14:50:03.46ID:aA4z/LNt ライブラリのソースコードを辿っていくとビルトイン関数だったりして萎えることもあるので、
まずは仕様をちゃんと読もうな。
まずは仕様をちゃんと読もうな。
801795
2019/03/17(日) 15:05:24.52ID:Q6jWm6hE >>799
ostream のヘッダ単独は意外に分量少なくて一通り見られたよ。
char系以外には...
operator<<(nullptr_t); // #if __cplusplus >= 201703L で条件コンパイル
operator<<(__streambuf_type* __sb);
があるみたい。本当にこれだけか確実ではないけど。
nullptr_t の方は「nullptr が送り込まれたら "nullptr" と表示しろ」だと思うが
__streambuf_type* __sb は分からん(定義は別ファイル、みたいだし)。
ostream のヘッダ単独は意外に分量少なくて一通り見られたよ。
char系以外には...
operator<<(nullptr_t); // #if __cplusplus >= 201703L で条件コンパイル
operator<<(__streambuf_type* __sb);
があるみたい。本当にこれだけか確実ではないけど。
nullptr_t の方は「nullptr が送り込まれたら "nullptr" と表示しろ」だと思うが
__streambuf_type* __sb は分からん(定義は別ファイル、みたいだし)。
802デフォルトの名無しさん
2019/03/17(日) 15:17:33.67ID:9G7IgbIM 痛レータが呼ばれるんじゃね
803デフォルトの名無しさん
2019/03/17(日) 19:25:05.63ID:wQNvtjPu 現在アルゴリズムの勉強をしています
ソートアルゴリズムで有名な基本挿入法で与えた5つの整数を小さい順に並べるプログラムがうまく動きません
基本選択法、基本交換法(バブルソート)は書けるのですが…
ソートアルゴリズム、アルゴリズムそのものは図で正しく書けるとは思うのですが、コードに落とし込むのがうまくいきません
書いたコードは稚拙ですが以下のものです おかしな点を教えてくだされば幸いです
#include<stdio.h>
//基本挿入法
int main(void){
int temp=0,j,i;
int ary[5]={9,6,1,5,2};
for(i=1;i<=4;i++){
temp=ary[i];
for(j=i-1;j>=0;j--){
if(ary[j]>ary[i]){
puts("aaa");
ary[j+1]=ary[j];
}else{
puts("jais");
j--;
break;
}
}
j++;
ary[j]=temp;
printf("a[%d]は%d a[%d]は%d¥n",j,ary[j],i,ary[i]);
}
for(i=0;i<=4;i++){
printf("%d¥n",ary[i]);
}
return 0;
}
ソートアルゴリズムで有名な基本挿入法で与えた5つの整数を小さい順に並べるプログラムがうまく動きません
基本選択法、基本交換法(バブルソート)は書けるのですが…
ソートアルゴリズム、アルゴリズムそのものは図で正しく書けるとは思うのですが、コードに落とし込むのがうまくいきません
書いたコードは稚拙ですが以下のものです おかしな点を教えてくだされば幸いです
#include<stdio.h>
//基本挿入法
int main(void){
int temp=0,j,i;
int ary[5]={9,6,1,5,2};
for(i=1;i<=4;i++){
temp=ary[i];
for(j=i-1;j>=0;j--){
if(ary[j]>ary[i]){
puts("aaa");
ary[j+1]=ary[j];
}else{
puts("jais");
j--;
break;
}
}
j++;
ary[j]=temp;
printf("a[%d]は%d a[%d]は%d¥n",j,ary[j],i,ary[i]);
}
for(i=0;i<=4;i++){
printf("%d¥n",ary[i]);
}
return 0;
}
804デフォルトの名無しさん
2019/03/17(日) 19:26:08.56ID:wQNvtjPu puts(“aaa”)やputs(“jais”)はprintf(“a[%d]は%d 〜”)の3つは、プリントデバグのために書いたものです…消し忘れました
すみません
すみません
806デフォルトの名無しさん
2019/04/01(月) 21:33:07.89ID:iIi946R+ class C
{
public:
void f(){}
};
C* pc= new C;
pc.f();
コンパイルエラーが出るってことは、コンパイラはpcがポインタであることを
知ってる
なのになぜ、->と記述させるの?
{
public:
void f(){}
};
C* pc= new C;
pc.f();
コンパイルエラーが出るってことは、コンパイラはpcがポインタであることを
知ってる
なのになぜ、->と記述させるの?
807デフォルトの名無しさん
2019/04/01(月) 21:44:58.77ID:32G7a9z6 std::invoke使え
808デフォルトの名無しさん
2019/04/01(月) 21:52:40.40ID:7SOsx0TI ClassAのメンバにClassBがあってコンストラクタかsetterで外部から与えたいんだけど、
ClassBが大きくてできるだけコピーしたくない場合はどうするのがベストですか?
コピーコンストラクタが呼ばれた場合に初めてコピーされるようにしたいです
unique_ptr<ClassB>型にするとスコープを外れるときに落ちました
Class ClassA{
public:
ClassA(ClassB &b) { m_b.reset(&b); };
ClassA(const ClassA a) : m_b(new ClassB(a.m_b)){};
・・・
private:
unique_ptr<ClassB> m_b;
}
main(){
・・・
{
ClassB b;
ClassA a(b);
} // ここで落ちる
・・・
}
ClassBが大きくてできるだけコピーしたくない場合はどうするのがベストですか?
コピーコンストラクタが呼ばれた場合に初めてコピーされるようにしたいです
unique_ptr<ClassB>型にするとスコープを外れるときに落ちました
Class ClassA{
public:
ClassA(ClassB &b) { m_b.reset(&b); };
ClassA(const ClassA a) : m_b(new ClassB(a.m_b)){};
・・・
private:
unique_ptr<ClassB> m_b;
}
main(){
・・・
{
ClassB b;
ClassA a(b);
} // ここで落ちる
・・・
}
809デフォルトの名無しさん
2019/04/01(月) 22:09:12.99ID:oZ4uWA1m > m_b.reset(&b);
ヒープオブジェクトじゃないものをunique_ptrに突っ込んだらダメ。
カスタムデリータ用意するなら別だけど。
ヒープオブジェクトじゃないものをunique_ptrに突っ込んだらダメ。
カスタムデリータ用意するなら別だけど。
810デフォルトの名無しさん
2019/04/01(月) 22:22:19.12ID:7SOsx0TI811デフォルトの名無しさん
2019/04/01(月) 22:30:43.95ID:0T+gZcjq ClassAはClassBそのものを所有するのか
それとも外部のClassBへの参照を保持するだけなのか?
そのものを所有するなら外部から与えるのではなく
ClassAの中でClassBを構築するのも検討してみれば
// ClassAのコンストラクタ
// 11以降ならムーブとかも
ClassA(ClassBの構築に使う引数) : m_b(前記の引数) {}
それとも外部のClassBへの参照を保持するだけなのか?
そのものを所有するなら外部から与えるのではなく
ClassAの中でClassBを構築するのも検討してみれば
// ClassAのコンストラクタ
// 11以降ならムーブとかも
ClassA(ClassBの構築に使う引数) : m_b(前記の引数) {}
813デフォルトの名無しさん
2019/04/01(月) 22:51:52.32ID:7SOsx0TI ClassBの構築に使う引数も大きいためコピーを避けたいところです
基本的には参照を保持するだけにしたいところですが、ClassBがスコープを外れて破棄される場面ではClassAに実体をコピーできるようにしたいです
基本的には参照を保持するだけにしたいところですが、ClassBがスコープを外れて破棄される場面ではClassAに実体をコピーできるようにしたいです
814デフォルトの名無しさん
2019/04/01(月) 22:59:26.12ID:oZ4uWA1m なんでそこでわざわざコピーしたいの?
最初からnewでヒープに確保すりゃコピー必要ないのに。
最初からnewでヒープに確保すりゃコピー必要ないのに。
815デフォルトの名無しさん
2019/04/01(月) 23:35:23.75ID:32G7a9z6 AにB*とunique_ptr<B>を作って
AがBを使うときは常にB*経由でアクセス
Bを所有させたいときだけunique_ptrにヒープ管理だけさせる
AがBを使うときは常にB*経由でアクセス
Bを所有させたいときだけunique_ptrにヒープ管理だけさせる
816デフォルトの名無しさん
2019/04/01(月) 23:37:44.29ID:7SOsx0TI 2つ持つという発想はありませんでした
試してみます
試してみます
817デフォルトの名無しさん
2019/04/04(木) 17:56:45.10ID:4dlKQxP/ 昔、openGLを使ってC++出遊んでたんですけど、また最近触りたくなりました
皆さんC++で何作ってますか?
個人開発規模でお願いします
皆さんC++で何作ってますか?
個人開発規模でお願いします
>>817
昔作ったツールがひょんなことで役立っています…
あるディレクトリを別のドライブにコピーするだけのことなんですが、いや、まあ、Windows はなかなか御しがたく、path 文字列長が一定範囲を超過すると止まってしまう変てこなコマンドラインツールが未だに現役だったりするのです…
https://mevius.5ch.net/test/read.cgi/tech/1434079972/53
昔作ったツールがひょんなことで役立っています…
あるディレクトリを別のドライブにコピーするだけのことなんですが、いや、まあ、Windows はなかなか御しがたく、path 文字列長が一定範囲を超過すると止まってしまう変てこなコマンドラインツールが未だに現役だったりするのです…
https://mevius.5ch.net/test/read.cgi/tech/1434079972/53
819デフォルトの名無しさん
2019/04/04(木) 20:14:39.57ID:vPLFSwkc820デフォルトの名無しさん
2019/04/04(木) 20:22:00.68ID:USs/shwk Qtのデメリットはライセンスだけだから個人でやる分には良い選択
821デフォルトの名無しさん
2019/04/12(金) 11:39:32.60ID:K5RuTlhq オブジェクト指向を学ぶのにRubyあたりを使うのは
どういうデメリットが?
Pythonは「バージョン違いによる仕様変更」に
入門書レベルのコードが影響されるのであれば「良い選択とは言えない」ことになりそーだけど
どういうデメリットが?
Pythonは「バージョン違いによる仕様変更」に
入門書レベルのコードが影響されるのであれば「良い選択とは言えない」ことになりそーだけど
822デフォルトの名無しさん
2019/04/12(金) 12:37:54.42ID:oOSdboOz >>821
せっかく新しい言語を学ぶなら、近い将来役に立たなくなる言語より他の役に立つ言語を選んだ方が合理的だと思う
せっかく新しい言語を学ぶなら、近い将来役に立たなくなる言語より他の役に立つ言語を選んだ方が合理的だと思う
823デフォルトの名無しさん
2019/04/12(金) 13:47:38.12ID:+CDO09PL pythonて破壊的な変更があったのは20年近く前なのに、未だに古い仕様で書かれた入門書が出回っているなら、オブジェクト指向学習に最適化どうかとは別に、問題な気が。
824デフォルトの名無しさん
2019/04/12(金) 14:05:10.56ID:VR9mZ4dF rubyは古い言語
825デフォルトの名無しさん
2019/04/12(金) 14:50:54.53ID:K5RuTlhq Qt5.12.2はLGPLライセンスでインストールしとけばok?
他のライセンスは初見
他のライセンスは初見
826デフォルトの名無しさん
2019/04/12(金) 14:56:36.82ID:rTBxcnf6 追加パッケージを使わないのならLGPLでおk
827デフォルトの名無しさん
2019/04/12(金) 15:06:17.42ID:K5RuTlhq "Qt Creator 4.8.2 CDB Debugg..." と "MinGW 7.3.0" 64-bit" 入れたら Hello World の窓が表示できるようになったけど、
練習ならそんなかんじでok?
練習ならそんなかんじでok?
828デフォルトの名無しさん
2019/04/12(金) 15:28:10.39ID:VR9mZ4dF しばらく正常に動いてるように観えてても
あとで問題が顕在化して困るパターン
あとで問題が顕在化して困るパターン
829デフォルトの名無しさん
2019/04/12(金) 15:38:10.46ID:K5RuTlhq どのような問題が発生しうるのでしょう?
もっぱら個人用の練習用とする予定
もっぱら個人用の練習用とする予定
830デフォルトの名無しさん
2019/04/12(金) 15:54:14.03ID:rTBxcnf6 Qt始めるならとりあえずこのシリーズ読もう
https://blog.qt.io/jp/category/getting-started-with-qt/
https://blog.qt.io/jp/category/getting-started-with-qt/
831デフォルトの名無しさん
2019/04/12(金) 17:06:12.27ID:K5RuTlhq 私の場合は、インストール〜 "Hello World" については
https://qiita.com/yasumodev/items/399ec89b7205e3c0bab1
https://qiita.com/yasumodev/items/104446261114e9a7352c
を参考にしました。続きについては、御提示のリンク先を試してみますね
https://qiita.com/yasumodev/items/399ec89b7205e3c0bab1
https://qiita.com/yasumodev/items/104446261114e9a7352c
を参考にしました。続きについては、御提示のリンク先を試してみますね
832デフォルトの名無しさん
2019/04/13(土) 12:09:38.16ID:r7SUy1hn ID:K5RuTlhq です
>>826
https://www3.sra.co.jp/qt/licence/index.html を見て『グラフ作成パッケージQt Charts入れておいた方が便利かも』と思い
いったんアンインストールしてみたのですが、
[Qt 5.12.2 のセットアップ] の画面で
Qt Charts
Qt Data Visualization
Qt purchasing
Qt Virtual Keyboard
Qt WebEngine
Qt Network Authrozation
Qt WebGL Streming Plugin
にチェックを入れたとしても LGPL が選べるようです
サードパーティーの追加パッケージで問題となりうる…?
>>826
https://www3.sra.co.jp/qt/licence/index.html を見て『グラフ作成パッケージQt Charts入れておいた方が便利かも』と思い
いったんアンインストールしてみたのですが、
[Qt 5.12.2 のセットアップ] の画面で
Qt Charts
Qt Data Visualization
Qt purchasing
Qt Virtual Keyboard
Qt WebEngine
Qt Network Authrozation
Qt WebGL Streming Plugin
にチェックを入れたとしても LGPL が選べるようです
サードパーティーの追加パッケージで問題となりうる…?
833デフォルトの名無しさん
2019/04/13(土) 12:11:50.81ID:r7SUy1hn >>828
具体的に「どのような問題が顕在化」し「どのように困る」ことになるのでしょうか
クラスとメンバ関数のみの指摘でも構わないので、示していただけませんか?
また、その問題を回避する方法は何なのでしょうか?
具体的に「どのような問題が顕在化」し「どのように困る」ことになるのでしょうか
クラスとメンバ関数のみの指摘でも構わないので、示していただけませんか?
また、その問題を回避する方法は何なのでしょうか?
834デフォルトの名無しさん
2019/04/13(土) 13:57:08.11ID:TvmgiEsJ835デフォルトの名無しさん
2019/04/13(土) 20:47:38.59ID:r7SUy1hn 昔は知らんが5.12.1ならQt ChartsはLGPLで許諾されるよ?
836デフォルトの名無しさん
2019/04/13(土) 20:48:56.62ID:r7SUy1hn 5.12.2だった
837デフォルトの名無しさん
2019/04/13(土) 23:19:58.42ID:TvmgiEsJ はっきりとGPLv3と書かれてる
https://www.qt.io/download
Open Source->Additional features->Data visualization の?を参照
https://www.qt.io/download
Open Source->Additional features->Data visualization の?を参照
838デフォルトの名無しさん
2019/04/14(日) 00:04:08.34ID:El+pt49w 条項はこれから確認する
>>837
インストールの操作手順からしたら
不意打ちも良いとこだなあ
Qt Charts をチェックした状態で[次へ(N)]ボタンを押したときに
「修正を受けたGPLv3」以外のラジオボタンが無効になってないと
UIとしておかしくねえか
あと「100%GPLv3と一致で修正条項なし」なん?
そうだとしたら、なおさらおかしい
>>837
インストールの操作手順からしたら
不意打ちも良いとこだなあ
Qt Charts をチェックした状態で[次へ(N)]ボタンを押したときに
「修正を受けたGPLv3」以外のラジオボタンが無効になってないと
UIとしておかしくねえか
あと「100%GPLv3と一致で修正条項なし」なん?
そうだとしたら、なおさらおかしい
839デフォルトの名無しさん
2019/04/14(日) 00:07:28.45ID:El+pt49w そういえば
LICENSE
などと大文字ファイル名にしないと効力が発生しないとする「糞判例がある」と聞いたことがあるけど、日本の裁判所?
ググっただけでは見つからなかった
最高裁判例なら検索結果の判決文をPDFで読める訳だがなあ
そのようなケースを敷衍すると、帰結として、Qt chartsはLGPLとなりうる
GPLv3 については逐条解説もあるから、そっちの内容も確認してみてちょ(あくまで「解説」)
LICENSE
などと大文字ファイル名にしないと効力が発生しないとする「糞判例がある」と聞いたことがあるけど、日本の裁判所?
ググっただけでは見つからなかった
最高裁判例なら検索結果の判決文をPDFで読める訳だがなあ
そのようなケースを敷衍すると、帰結として、Qt chartsはLGPLとなりうる
GPLv3 については逐条解説もあるから、そっちの内容も確認してみてちょ(あくまで「解説」)
840デフォルトの名無しさん
2019/04/14(日) 00:54:57.43ID:El+pt49w 純粋に「Qt のライセンス」の話なのでスレチ?
copyright notice の表示方法の適切性について、GPLv3って基本的には明確には記載してなくね
ただし今回のケースだと、「インストーラが LGPL によるライセンスを表示した状態」で先に進める以上
0. Definitions. の第8パラグラフ(1) 反対解釈により、「GPLv3は適用されない」と読む余地がある
実際、GPLv3 につき "displays an appropriate copyright notice" してないもの
copyright notice の表示方法の適切性について、GPLv3って基本的には明確には記載してなくね
ただし今回のケースだと、「インストーラが LGPL によるライセンスを表示した状態」で先に進める以上
0. Definitions. の第8パラグラフ(1) 反対解釈により、「GPLv3は適用されない」と読む余地がある
実際、GPLv3 につき "displays an appropriate copyright notice" してないもの
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【インバウンド】中国からの“渡航自粛”…ツアー1000人分の直前キャンセル「キャンセル料は免除してくれ」 ことしいっぱいキャンセルに [1ゲットロボ★]
- 「国民の憤りを引き起こした」中国側“高市首相発言の撤回改めて要求” [どどん★]
- 【芸能】日中関係悪化でエンタメ業界に大ダメージ… JO1の中国でのイベント中止、邦画は公開延期、STARTOアイドルへの影響も [冬月記者★]
- XやChatGPTで広範囲の通信障害 投稿や閲覧できず [蚤の市★]
- 【サッカー】日本代表、ボリビアに3発快勝 森保監督通算100試合目を飾る…鎌田、町野、中村がゴール [久太郎★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★3 [ぐれ★]
- 自民党議員「高市は先人が築き上げた日中関係を壊した。外務省が謝罪に言ってるが自分で責任を取れ」 [834922174]
- 米シンクタンク「アメリカは台湾問題で"あいまい戦略"を取っている。高市早苗はこの方針から逸脱している」 [603416639]
- 【高市早苗】バス会社、中国からのキャンセルで12月で2000万円~3000万円の損失へ [115996789]
- かしこいワンコっていうVtuberの子知ってる?
- カレーライスぐちゃぐちゃに混ぜる奴🤣
- 岡田克也「軽々しく存立危機事態とか言うべきじゃない」高市早苗「台湾で武力攻撃が発生したらどう考えても日本の存立危機事態」 [931948549]
