C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part142
https://mevius.5ch.net/test/read.cgi/tech/1554124625/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1556142878/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
----- テンプレ ここまで -----
VIPQ2_EXTDAT: default:vvv:1000:512:----: EXT was configured
C++相談室 part143
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ)
2019/06/15(土) 13:51:53.57ID:DKQ0QQLH0560蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ)
2019/07/03(水) 21:55:07.11ID:JWWmhuhv0 中学レベルの問題が直感で分かるような自称天才は、問題を見るとすぐ答えがわかるから、自分が天才・神童だと思い込む。
しかし、複数の変数が絡む数式になると直感は外れるようになる。だから、考える努力をしない自称天才は高校くらいで落ちぶれる。
しかし、複数の変数が絡む数式になると直感は外れるようになる。だから、考える努力をしない自称天才は高校くらいで落ちぶれる。
561デフォルトの名無しさん (ワッチョイ)
2019/07/03(水) 22:05:55.22ID:S/aBv8fE0562デフォルトの名無しさん (ワッチョイ)
2019/07/03(水) 22:07:27.64ID:Mf/6Ojwj0563デフォルトの名無しさん (ワッチョイ)
2019/07/03(水) 22:11:09.39ID:MMRf6v9s0 std array使わないで生配列推奨する意味がわからない
564デフォルトの名無しさん (ワッチョイ)
2019/07/03(水) 22:26:30.32ID:S/aBv8fE0 どのようにプログラミングしても、vector には勝てない!
真ん中あたりの要素の追加・削除で、大量の要素がズレても、それでもvector が有利!
だから素人は、vector を使っておけばよい
リストは、ランダムアクセスできない。
常に線形探索だから、O(n)
真ん中あたりの要素の追加・削除で、大量の要素がズレても、それでもvector が有利!
だから素人は、vector を使っておけばよい
リストは、ランダムアクセスできない。
常に線形探索だから、O(n)
565デフォルトの名無しさん (ワッチョイ)
2019/07/03(水) 22:29:53.07ID:JvcEtzLy0 >>564
お前はRubyだけ弄ってればいいよ
お前はRubyだけ弄ってればいいよ
566デフォルトの名無しさん (ワッチョイ)
2019/07/03(水) 22:30:37.31ID:U3PwexmG0 >>563
記述が少ない
記述が少ない
567蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ)
2019/07/03(水) 22:32:11.35ID:JWWmhuhv0 allocaもいいぞ。
568デフォルトの名無しさん (ワッチョイ)
2019/07/03(水) 22:43:27.14ID:S/aBv8fE0 Rubyのしくみ、2014
Rubyの実装系、Ruby1.9のRuby仮想マシンの本に書いてあるけど、
Rubyでは、Hashの要素数が増えていくと、再編成される
バケット数は、2の累乗付近の素数を使う。
つまり、倍々に増やしていく
8+3, 16+3, 32+5, 64+3, 128+3, 256+27, 512+9...
1つのバケットには、平均して5つの要素を入れる(衝突)。
11*5=55, 19*5=95, 37*5=185...
つまり要素数が、56, 96, 186...個になると、
バケット数を増やして、再編成する
普段、1万個の要素を追加するのに、8msかかるが、
再編成するタイミングでは、20msかかる。
要素数が増えていけば、もっとかかる
10万個なら200ms、100万個なら2秒と、再編成があるたび、ドンドン増えていく
Rubyの実装系、Ruby1.9のRuby仮想マシンの本に書いてあるけど、
Rubyでは、Hashの要素数が増えていくと、再編成される
バケット数は、2の累乗付近の素数を使う。
つまり、倍々に増やしていく
8+3, 16+3, 32+5, 64+3, 128+3, 256+27, 512+9...
1つのバケットには、平均して5つの要素を入れる(衝突)。
11*5=55, 19*5=95, 37*5=185...
つまり要素数が、56, 96, 186...個になると、
バケット数を増やして、再編成する
普段、1万個の要素を追加するのに、8msかかるが、
再編成するタイミングでは、20msかかる。
要素数が増えていけば、もっとかかる
10万個なら200ms、100万個なら2秒と、再編成があるたび、ドンドン増えていく
569デフォルトの名無しさん (ブーイモ)
2019/07/03(水) 22:47:35.04ID:+l3ADsTnM570デフォルトの名無しさん (ワッチョイ)
2019/07/03(水) 23:06:06.02ID:Odxsa8jS0 >>558
違う。
vector は、最悪、a*N*sizeof(TYPE) + (制御情報サイズ) だ。
listは、常に、N * ( sizeof(TYPE) + ポインタサイズ * b ) + (制御情報サイズ) だ。
aは、実装依存で、典型的には2。vectorを確保した直後を除いて1であることはない。
b は、1または2。
あなたのやったテストでは、vector を確保した直後だから、a=1になっていただけ。
違う。
vector は、最悪、a*N*sizeof(TYPE) + (制御情報サイズ) だ。
listは、常に、N * ( sizeof(TYPE) + ポインタサイズ * b ) + (制御情報サイズ) だ。
aは、実装依存で、典型的には2。vectorを確保した直後を除いて1であることはない。
b は、1または2。
あなたのやったテストでは、vector を確保した直後だから、a=1になっていただけ。
571デフォルトの名無しさん (ワッチョイ)
2019/07/03(水) 23:08:20.45ID:MMRf6v9s0 bが1ですむ可能性があるとかw
572デフォルトの名無しさん (ブーイモ)
2019/07/03(水) 23:18:47.11ID:+l3ADsTnM vectorとかlistとか初心者向けの話題いつまでやんの?
まさにパーキンソンの凡俗法則だな
天才様が主導してるわけだがw
まさにパーキンソンの凡俗法則だな
天才様が主導してるわけだがw
573デフォルトの名無しさん (ワッチョイ)
2019/07/03(水) 23:22:56.33ID:MMRf6v9s0 使用メモリって観点だと、realloc時は要素数の1+a倍だから、最悪値もそれになる
まあ、要素数の見積もりが全くできない状況でもaは容易に制御可能でcapacity見ながらreallocが起こる直前のpush_back前にreserveかけりゃ済む
最悪1要素ずつ拡張すればa~1
性能は最悪だがw
まあ、要素数の見積もりが全くできない状況でもaは容易に制御可能でcapacity見ながらreallocが起こる直前のpush_back前にreserveかけりゃ済む
最悪1要素ずつ拡張すればa~1
性能は最悪だがw
574デフォルトの名無しさん (ワッチョイ)
2019/07/03(水) 23:26:03.86ID:U3PwexmG0 参考書に答え書いてあるものを永久に語り続けるのおもろ
575デフォルトの名無しさん (ワッチョイ)
2019/07/03(水) 23:42:03.45ID:MMRf6v9s0 std::list<std::string> lines;
std::string l;
while(std::getline(std::cin,l)){
lines.push_back(l); //(1)
//lines.push_back(std::move(l)); //(2)
}
だと(1)の方がいいよね
特に行内の文字数、行数が大きくなると速度差はかなり大きくなる。
stringじゃなく同様のvectorでも同じ
listだと(2)が速いだろうけど
std::string l;
while(std::getline(std::cin,l)){
lines.push_back(l); //(1)
//lines.push_back(std::move(l)); //(2)
}
だと(1)の方がいいよね
特に行内の文字数、行数が大きくなると速度差はかなり大きくなる。
stringじゃなく同様のvectorでも同じ
listだと(2)が速いだろうけど
576デフォルトの名無しさん (ワッチョイ)
2019/07/03(水) 23:42:46.34ID:Odxsa8jS0 >>549
あなたの誘導に沿って説明しよう。
要素の型をTYPEとすると、要素の1つのバイト数を、E=sizeof(TYPE)であり、
それが、x 個ある場合を考える。
L(x) = H1 + x * (E + P * 2) // list に必要なバイト数
V(x) = H2 + x * E * 1.5 // vector に必要なバイト数
となっている。
P は、ポインタ1つ当りのバイト数であり、Windows の 32BIT モードの時は、4 である。
これらの関数は、どちらも n に対する1次関数で、
グラフにすると、傾きはそれぞれ、
a_L = E + P * 2 // list の必要バイト数の傾き
= E + 8
a_V = 1.5 * E // vector の必要バイト数の傾き
だ。
要素1つ辺りのサイズ E が十分大きい場合、たとえば、100バイトの時を考えれば、
a_L = 100 + 8 = 108
a_V = 1.5 * 100 = 150
となる。
だから、V(x)の傾きの方が、L(x) の傾きのよりも大きい。
だから明らかに V(x) の方が効率が悪い事になる。H1, H2 がどんな
値であれ、要素数 x が十分大きい場合にはメモリ効率の良さは
xに対するグラフの傾きで決まる。H1, H2 は、いわゆる「y切片」
を決めるだけで、x が大きい時には影響はなくなっていくから。
あなたの誘導に沿って説明しよう。
要素の型をTYPEとすると、要素の1つのバイト数を、E=sizeof(TYPE)であり、
それが、x 個ある場合を考える。
L(x) = H1 + x * (E + P * 2) // list に必要なバイト数
V(x) = H2 + x * E * 1.5 // vector に必要なバイト数
となっている。
P は、ポインタ1つ当りのバイト数であり、Windows の 32BIT モードの時は、4 である。
これらの関数は、どちらも n に対する1次関数で、
グラフにすると、傾きはそれぞれ、
a_L = E + P * 2 // list の必要バイト数の傾き
= E + 8
a_V = 1.5 * E // vector の必要バイト数の傾き
だ。
要素1つ辺りのサイズ E が十分大きい場合、たとえば、100バイトの時を考えれば、
a_L = 100 + 8 = 108
a_V = 1.5 * 100 = 150
となる。
だから、V(x)の傾きの方が、L(x) の傾きのよりも大きい。
だから明らかに V(x) の方が効率が悪い事になる。H1, H2 がどんな
値であれ、要素数 x が十分大きい場合にはメモリ効率の良さは
xに対するグラフの傾きで決まる。H1, H2 は、いわゆる「y切片」
を決めるだけで、x が大きい時には影響はなくなっていくから。
577デフォルトの名無しさん (ワッチョイ)
2019/07/03(水) 23:43:59.85ID:Odxsa8jS0 >>576
[続き]
>>549 の最後の方は:
『listよりvectorの方がサイズが小さい』・・・・☆
と同値な条件は、
H1 + n * (E + P * 2) > H2 + n * E * 1.5 ・・・・(1)
⇔
n * (P * 2 - E * 0.5) > H2 - H1 ・・・・(2)
である、というところまでは正しい。ところが、中学校で習ったように、
不等式では、両辺を負の数で割るると、不等号の向きが逆になってしまう。
だから、割る数が正か負かを気をつけないといけない。
今、E = 100, P = 4 だから、
(P * 2 - E * 0.5) = 4 * 2 - 100 * 0.5 = 8 - 50 = -42
となり、負の値である。E が1000や10000の場合は、どちらも
もっと絶対値の大きな負の値となる。だから、この部分は要素のサイズ
が十分大きいと必ず負の値である。ゆえに、(2) をこの数で割ると、
n < (H2 - H1) / (P * 2 - E * 0.5) ・・・・(3)
となり、あなたの書いた式とは不等号の向きが逆となる。
さて、この(3)の意味は、右辺の値は、Eの値が100の場合は、分母は負の値であるが、
分子の H2-H1 の値は実装依存なので、右辺全体としては、正か負かも定まらない。
そこで、右辺の値を R とおくと、n < R という式になる。
この意味は、ある値 R よりも要素数 n が小さいと、この式が成立する、
ということである。この式は、あなたが書いたように、
☆と同値な式である。だから、ある値 R よりも要素数 n が小さいと、
☆が成立することを意味している。つまり、要素数が十分小さいときに
のみ「list より vector のサイズが小さい」のである。逆に、
要素数が十分大きければ、「list より vector のサイズが大きい」
ことが言える。
[続き]
>>549 の最後の方は:
『listよりvectorの方がサイズが小さい』・・・・☆
と同値な条件は、
H1 + n * (E + P * 2) > H2 + n * E * 1.5 ・・・・(1)
⇔
n * (P * 2 - E * 0.5) > H2 - H1 ・・・・(2)
である、というところまでは正しい。ところが、中学校で習ったように、
不等式では、両辺を負の数で割るると、不等号の向きが逆になってしまう。
だから、割る数が正か負かを気をつけないといけない。
今、E = 100, P = 4 だから、
(P * 2 - E * 0.5) = 4 * 2 - 100 * 0.5 = 8 - 50 = -42
となり、負の値である。E が1000や10000の場合は、どちらも
もっと絶対値の大きな負の値となる。だから、この部分は要素のサイズ
が十分大きいと必ず負の値である。ゆえに、(2) をこの数で割ると、
n < (H2 - H1) / (P * 2 - E * 0.5) ・・・・(3)
となり、あなたの書いた式とは不等号の向きが逆となる。
さて、この(3)の意味は、右辺の値は、Eの値が100の場合は、分母は負の値であるが、
分子の H2-H1 の値は実装依存なので、右辺全体としては、正か負かも定まらない。
そこで、右辺の値を R とおくと、n < R という式になる。
この意味は、ある値 R よりも要素数 n が小さいと、この式が成立する、
ということである。この式は、あなたが書いたように、
☆と同値な式である。だから、ある値 R よりも要素数 n が小さいと、
☆が成立することを意味している。つまり、要素数が十分小さいときに
のみ「list より vector のサイズが小さい」のである。逆に、
要素数が十分大きければ、「list より vector のサイズが大きい」
ことが言える。
578デフォルトの名無しさん (ワッチョイ)
2019/07/03(水) 23:44:44.32ID:U3PwexmG0 もういいってしょうもない話
579デフォルトの名無しさん (ワッチョイ)
2019/07/03(水) 23:45:33.05ID:MMRf6v9s0 数学得意とか言うわりに内容が中学生レベルなのをわざわざ説明するとか
580デフォルトの名無しさん (ワッチョイ)
2019/07/03(水) 23:45:34.35ID:Odxsa8jS0581デフォルトの名無しさん (ワッチョイ)
2019/07/03(水) 23:48:05.25ID:Odxsa8jS0 >>579
ここにいる人たちが、懇切丁寧に説明しないと分かってくれないからだよ。
ここにいる人たちが、懇切丁寧に説明しないと分かってくれないからだよ。
582デフォルトの名無しさん (ワッチョイ)
2019/07/03(水) 23:50:03.60ID:U3PwexmG0 3行以下にできないなら説明しなくていいです・・・
583デフォルトの名無しさん (ワッチョイ)
2019/07/03(水) 23:53:56.60ID:MMRf6v9s0 メモリ容量が厳しいときにreserveしないなんてあり得ないし、Typeがでかく、要素数不明なときにそのままvectorに放り込むとかも普通しないよね
それこそスマポとか使ってでもlist使わない方がましな場合が殆んど
それこそスマポとか使ってでもlist使わない方がましな場合が殆んど
584デフォルトの名無しさん (ワッチョイ)
2019/07/03(水) 23:54:04.68ID:Odxsa8jS0585デフォルトの名無しさん (ワッチョイ)
2019/07/03(水) 23:54:50.78ID:efP/7s/50 (自分が知っている部分だけ)懇切丁寧に説明しないと
=知らない部分は無視して天才どうのこうので議論を拒否する
説明した部分に疑問持ってるレスどれ?
=知らない部分は無視して天才どうのこうので議論を拒否する
説明した部分に疑問持ってるレスどれ?
586デフォルトの名無しさん (ワッチョイ)
2019/07/03(水) 23:55:01.46ID:U3PwexmG0 ヒント:ここは5ch
587デフォルトの名無しさん (ワッチョイ)
2019/07/03(水) 23:58:40.02ID:MMRf6v9s0 大体が生配列とvectorの比較だったわけだが、なんで可変長でのメモリ使用でlistと比較しているんだ?
vectorじゃなく生配列使うべき有意な優位性を説明しろと
vectorじゃなく生配列使うべき有意な優位性を説明しろと
588デフォルトの名無しさん (ワッチョイ)
2019/07/03(水) 23:59:40.90ID:Odxsa8jS0589デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 00:04:14.98ID:+bvr5vAX0 そもそも、最大限使えるメモリ容量から計算してreserveしておけば、listよりより多くの要素数格納できるんだな。
listの場合malloc的なものの管理領域も大きくなるってのも、メモリ厳しい場合には無視できない
listの場合malloc的なものの管理領域も大きくなるってのも、メモリ厳しい場合には無視できない
590デフォルトの名無しさん (ブーイモ)
2019/07/04(木) 00:04:37.74ID:BGPK0DtMM >>560
行列がわからない自称上級者の蟻さん、チーッス
行列がわからない自称上級者の蟻さん、チーッス
591デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 00:05:06.10ID:OupeWpkE0 >>587
生配列に必要なバイト数:
A(x)=E * x
vector に必要なバイト数
V1(x) = H2 + 1.5 * E * x // 平均時
V2(x) = H2 + 2 * E * x // 最悪時
これらをみるだけでも、生配列の方が効率がいい事が分かる。
要素を書き込む時にも、生配列は典型的には1クロック。
vectorだと、境界チェックが入るので5クロックくらいは必要となる。
境界チェックは条件 jump なので、パイプライン類の乱れが生じ
だいぶ遅くなることが有る。
生配列に必要なバイト数:
A(x)=E * x
vector に必要なバイト数
V1(x) = H2 + 1.5 * E * x // 平均時
V2(x) = H2 + 2 * E * x // 最悪時
これらをみるだけでも、生配列の方が効率がいい事が分かる。
要素を書き込む時にも、生配列は典型的には1クロック。
vectorだと、境界チェックが入るので5クロックくらいは必要となる。
境界チェックは条件 jump なので、パイプライン類の乱れが生じ
だいぶ遅くなることが有る。
592デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 00:05:27.97ID:OMb74HbU0 listとvectorの違いなんて皆わかった上で議論しているのに天才さんはバカなの?
最近アルゴリズム入門書でも読んで語りたいだけなの?
最近アルゴリズム入門書でも読んで語りたいだけなの?
593デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 00:08:18.15ID:OupeWpkE0 >>589
それもあるが、reserve()は時間がかかるので、扱うデータが巨大な場合には、
無駄が多くなるのと、reserve()するまでの最悪時には2倍の領域が必要となる事が
メモリ用件が厳しいときには問題となることも有る。
ただし、listにもデメリットは有る。それは、1要素を追加するときに new されるので、
典型的には150クロック程度の時間がかかってしまうことだ。
それもあるが、reserve()は時間がかかるので、扱うデータが巨大な場合には、
無駄が多くなるのと、reserve()するまでの最悪時には2倍の領域が必要となる事が
メモリ用件が厳しいときには問題となることも有る。
ただし、listにもデメリットは有る。それは、1要素を追加するときに new されるので、
典型的には150クロック程度の時間がかかってしまうことだ。
594デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 00:08:37.45ID:+bvr5vAX0 容量既知なら配列との差は管理領域とヒープが別になるオーバヘッドだけ
ヒープが別になるってのを責めて来るならまあ分かるが、容量既知なのに全くその情報使わない最悪値で比較とかセンス無さすぎ
ヒープが別になるってのを責めて来るならまあ分かるが、容量既知なのに全くその情報使わない最悪値で比較とかセンス無さすぎ
595デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 00:10:31.88ID:OupeWpkE0 >>592
このスレの99%の人が分かってない。
このスレの99%の人が分かってない。
596デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 00:11:56.58ID:+bvr5vAX0 size 0でのreserveは別に時間かからんだろ
それこそlistで要素追加でnewされるの1回分と大差ない
それこそlistで要素追加でnewされるの1回分と大差ない
597デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 00:15:07.03ID:pXTZ8sNQ0 MATLABで演算するときforループを使って一つずつ計算するよりもsumやmeanなどの関数を行列に対して行う方が圧倒的に速いのですが
C++にもMATLABのように一括で高速に行う方法がありますか?
C++にもMATLABのように一括で高速に行う方法がありますか?
598デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 00:17:08.19ID:OupeWpkE0 >>593
なお、要素が、サイズが小さくて、かつコンストラクタを持たないような
単純なデータだとreserve()の時間が list の (150 * 要素数) (クロック)
よりも短いことも少なくて済む事もあるが、サイズが600バイトを超えたり、
要素の中に、newして持っているデータがあるような場合があったりする
場合や、要素のコンストラクタが重い作業を行うには、reserve()は、
listよりも遅くなる。
だから、要素が今後のプログラミングの過程でどんなものになるか分からない場合には、
listは安定した速度が維持できるが、vectorはだんだん遅くなっていく恐れが有る。
なお、要素が、サイズが小さくて、かつコンストラクタを持たないような
単純なデータだとreserve()の時間が list の (150 * 要素数) (クロック)
よりも短いことも少なくて済む事もあるが、サイズが600バイトを超えたり、
要素の中に、newして持っているデータがあるような場合があったりする
場合や、要素のコンストラクタが重い作業を行うには、reserve()は、
listよりも遅くなる。
だから、要素が今後のプログラミングの過程でどんなものになるか分からない場合には、
listは安定した速度が維持できるが、vectorはだんだん遅くなっていく恐れが有る。
599デフォルトの名無しさん (ブーイモ)
2019/07/04(木) 00:19:04.81ID:Evy1L2/hM クロックとか言ってるやつもロートルだな
全く世の技術についていけてない
全く世の技術についていけてない
600デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 00:19:14.34ID:QgrgqeUu0 >>597
ない
ない
601デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 00:19:40.29ID:OupeWpkE0602デフォルトの名無しさん (ブーイモ)
2019/07/04(木) 00:21:13.94ID:Evy1L2/hM ハイパフォーマンス必要なとこでlistなんか使わないからど素人さん
603デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 00:25:40.63ID:OupeWpkE0 >>601
それに、reserve()のためには、一般的には、要素は、コピー・コンストラクタを
持つ必要がある。一方、listの場合には、コピ・コンを省略できる。
C++を使っていると分かるが、デフォルト・コンストラクタを作ることはほぼ必須
だが、コピ・コンはめんどくさいので書きたくないことが多い。その場合に、
listの方が楽。
それに、reserve()のためには、一般的には、要素は、コピー・コンストラクタを
持つ必要がある。一方、listの場合には、コピ・コンを省略できる。
C++を使っていると分かるが、デフォルト・コンストラクタを作ることはほぼ必須
だが、コピ・コンはめんどくさいので書きたくないことが多い。その場合に、
listの方が楽。
604デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 00:26:45.21ID:OupeWpkE0 >>602
vectorとreserve()の組み合わせはもっと駄目だ。
vectorとreserve()の組み合わせはもっと駄目だ。
605デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 00:27:30.60ID:OMb74HbU0 forward_list
とか知らないんだろうな
バカそうだし
とか知らないんだろうな
バカそうだし
606デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 00:31:07.37ID:+bvr5vAX0 >>601
要素既知の配列と同様の用途の場合、まともなスキルのあるプログラマなら、サイズ指定constructor、empty状態でのresize、empty状態でのreserve
のいずれかを使う。
そうするとmalloc一回と、前者二つは要素数分の要素型の配置newデフォルトもしくはコピーconstructorが呼ばれる。
要素既知の配列と同様の用途の場合、まともなスキルのあるプログラマなら、サイズ指定constructor、empty状態でのresize、empty状態でのreserve
のいずれかを使う。
そうするとmalloc一回と、前者二つは要素数分の要素型の配置newデフォルトもしくはコピーconstructorが呼ばれる。
607デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 00:31:14.53ID:z3/vg39Q0608デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 00:36:08.58ID:+bvr5vAX0 vector相当にcapaciry()+xなreserve相当をするCArrayってのがあってだな
MS自身がどうしてもこれじゃなきゃ駄目な場合以外使うなと言うくらいの糞
MS自身がどうしてもこれじゃなきゃ駄目な場合以外使うなと言うくらいの糞
609デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 00:36:47.68ID:OupeWpkE0 >>606
要素数既知なら、最速が TYPE aaa[N] で次が new TYPE[N]。
逢えて vector を使う意味がない。
empty状態の reserve() とかしてまで vector にこだわる意味が分からない。
要素数既知なら、最速が TYPE aaa[N] で次が new TYPE[N]。
逢えて vector を使う意味がない。
empty状態の reserve() とかしてまで vector にこだわる意味が分からない。
610デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 00:38:37.52ID:OupeWpkE0 >>607
むしろ逆で、生配列使えばいい場面で、何故か vector に固執する人がいるんだよ。
むしろ逆で、生配列使えばいい場面で、何故か vector に固執する人がいるんだよ。
611デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 00:39:15.33ID:aorw8zR90 どこにそんな人居たの?
レス番あげてよ
レス番あげてよ
612デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 00:48:01.35ID:+bvr5vAX0 サイズ完全固定ならstd::array
最大サイズが既知なら少し無駄だがvector
格納領域内包する最大サイズ指定のvector擬きがあればベストなんだが
最大サイズが既知なら少し無駄だがvector
格納領域内包する最大サイズ指定のvector擬きがあればベストなんだが
613デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 00:51:39.87ID:+bvr5vAX0 後はサイズが大きくてスタック上に確保したくない時もvector使うだろ。
614デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 00:53:59.44ID:OupeWpkE0 >>613
その場合は、TYPE *pAaa = new TYPE[N];
その場合は、TYPE *pAaa = new TYPE[N];
615デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 00:56:53.06ID:knl8K+q10 まだやってるのかw
616デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 01:00:33.98ID:+bvr5vAX0617デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 01:02:18.21ID:jo/K3cJX0 自称天才すげーな
自分が何かいてるのか分かってないんだろうな
規格も読んでなさそう
自分が何かいてるのか分かってないんだろうな
規格も読んでなさそう
618デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 01:05:54.39ID:+bvr5vAX0619デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 01:21:19.34ID:OupeWpkE0 >>618
あなたは、C++とC#の速度が変わらないと思ってる系統の人だよね。
あなたは、C++とC#の速度が変わらないと思ってる系統の人だよね。
620デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 01:21:50.22ID:vGw4d28b0621デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 01:52:09.26ID:GHUD7qNB0 shared_array はまだ標準化されてないんだね。
622デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 02:32:03.47ID:z3/vg39Q0 たぶんこのおっさん例外安全って何かわかってないw
623デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 02:56:32.67ID:OupeWpkE0624デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 02:58:14.89ID:boKHx0+g0 >>623
誰がヒープ回収するねん...
誰がヒープ回収するねん...
625デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 03:00:26.38ID:QgrgqeUu0 とりあえずnewとかmake_sharedとかIDEがなくても型が明らかな場合はauto使おう
626デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 03:00:52.24ID:OupeWpkE0627デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 03:01:53.76ID:OupeWpkE0 「メモリ確保に失敗したこと」のメッセージを出す以外に対処法はないと
思うんだけど。
思うんだけど。
628デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 03:16:52.36ID:+bvr5vAX0 なんでnewで例外起こる話しているんだか
本当に全くわかっていないのね
本当に全くわかっていないのね
629デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 03:47:53.77ID:P4gQiU7c0 どうでもいい話はやめて今までにない新しい画期的なテクニックの話をしてくれ
頼む
一生のお願い
頼む
一生のお願い
630デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 05:48:37.09ID:Vr4LlPEB0 >>549
> n * (P * 2 - E * 0.5) > H2 - H1.
> n > (H2 - H1) / (P * 2 - E * 0.5).
> となる。
(P * 2 - E * 0.5)がマイナスだと不等号が逆転するのを忘れている
3 > 2 の両辺を-1で割ると -3 < -2
> n * (P * 2 - E * 0.5) > H2 - H1.
> n > (H2 - H1) / (P * 2 - E * 0.5).
> となる。
(P * 2 - E * 0.5)がマイナスだと不等号が逆転するのを忘れている
3 > 2 の両辺を-1で割ると -3 < -2
631デフォルトの名無しさん (オイコラミネオ)
2019/07/04(木) 07:22:01.27ID:Ic4+qAXvM >>629
そんなテクニックはここに書かない
そんなテクニックはここに書かない
632デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 08:41:24.64ID:boKHx0+g0633デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 08:52:16.87ID:yrHYMywV0634デフォルトの名無しさん (スッップ)
2019/07/04(木) 09:10:15.58ID:MHKH+BBjd また話それたのかw
ポインタもコンテナも結局都合の悪いレスはスルーしてるからこうなる
ポインタもコンテナも結局都合の悪いレスはスルーしてるからこうなる
635デフォルトの名無しさん (ブーイモ)
2019/07/04(木) 09:34:14.60ID:8zHkL2vVM こいつC++98で時間止まってるからな
20年かけてSTLコンテナの使い方学んで
その結果がvectorよりlist、それ以上に生ポインタが最強って結論
どうせ40代おっさん低収入だろうけど、自分を天才と呼び、
数学ががどうのこうの言うわり、単なる足し算掛け算をどや顔でさらすし、
本当読んでて可哀想になってくる
20年かけてSTLコンテナの使い方学んで
その結果がvectorよりlist、それ以上に生ポインタが最強って結論
どうせ40代おっさん低収入だろうけど、自分を天才と呼び、
数学ががどうのこうの言うわり、単なる足し算掛け算をどや顔でさらすし、
本当読んでて可哀想になってくる
636デフォルトの名無しさん (ブーイモ)
2019/07/04(木) 10:15:53.90ID:mwmcFkvyM 要素数固定ってコンパイル時に固定の意味と実行時にある値に決まるって意味があると思うけど
前者では T Arr[N]
後者では std::unique_ptr<T[ ],>
を使ってしまう。
それ自体をreturnしないときは std::array を使うのがかったるく感じてしまう
前者では T Arr[N]
後者では std::unique_ptr<T[ ],>
を使ってしまう。
それ自体をreturnしないときは std::array を使うのがかったるく感じてしまう
637デフォルトの名無しさん (ブーイモ)
2019/07/04(木) 10:35:11.99ID:VBCrH1IpM638デフォルトの名無しさん (アウアウウー)
2019/07/04(木) 11:36:25.81ID:Bk1vOaTSa639デフォルトの名無しさん (ブーイモ)
2019/07/04(木) 11:42:55.77ID:mwmcFkvyM でも std::begin std::end があるからスコープ内の単純な配列に std::arrayを使う
メリットがいまいちわからないんだよねー
メリットがいまいちわからないんだよねー
640デフォルトの名無しさん (ブーイモ)
2019/07/04(木) 11:55:46.77ID:zoOerLpiM begin endは普通の配列にも使えるだろ
641デフォルトの名無しさん (ブーイモ)
2019/07/04(木) 11:56:48.16ID:tdjije7mM642デフォルトの名無しさん (スフッ)
2019/07/04(木) 12:06:11.23ID:VQxD4eRSd template関数で受けたときにポインターにならないからauto lambdaで受けてもsizeがとれる
643デフォルトの名無しさん (ブーイモ)
2019/07/04(木) 12:17:57.65ID:mwmcFkvyM >>640
だから普通の配列を使ってしまうという話なんだが
だから普通の配列を使ってしまうという話なんだが
644デフォルトの名無しさん (ブーイモ)
2019/07/04(木) 12:19:43.85ID:mwmcFkvyM645デフォルトの名無しさん (ササクッテロ)
2019/07/04(木) 12:49:15.77ID:bmYDtW5Wp646デフォルトの名無しさん (ブーイモ)
2019/07/04(木) 12:50:55.35ID:zoOerLpiM >>643
変なところで改行するなよ
変なところで改行するなよ
647デフォルトの名無しさん (ブーイモ)
2019/07/04(木) 15:52:29.03ID:mwmcFkvyM648デフォルトの名無しさん (アウアウウー)
2019/07/04(木) 17:29:10.64ID:XTdeRRSwa 構造体をchar配列にシリアライズする方法を教えてください
649デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 17:31:04.99ID:QgrgqeUu0 memcpy
650デフォルトの名無しさん (ワントンキン)
2019/07/04(木) 17:32:23.03ID:MlPmA9V9M キャストしてぶっ込め
なお環境とアドレスによってはバスエラーが発生したりするよ
なお環境とアドレスによってはバスエラーが発生したりするよ
651デフォルトの名無しさん (スフッ)
2019/07/04(木) 17:41:18.95ID:DFmBoT0+d >>645
cとの互換性に起因した過去コードとの互換性保つために、配列を引数で渡そうとするとpointer渡しになるのだろう。
受け側でtemplate使ってT (&arr)[N]みたいに明示的に引き取らない限りは
c++20でstd::spanが使えるようになれば楽になるな。
それでも完全転送は通らないけど
cとの互換性に起因した過去コードとの互換性保つために、配列を引数で渡そうとするとpointer渡しになるのだろう。
受け側でtemplate使ってT (&arr)[N]みたいに明示的に引き取らない限りは
c++20でstd::spanが使えるようになれば楽になるな。
それでも完全転送は通らないけど
652デフォルトの名無しさん (アウアウウー)
2019/07/04(木) 17:42:05.56ID:Bk1vOaTSa 配置newで出来たりしますか?
653デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 20:00:03.82ID:C9xm0dvc0 >>651
いや、受け側でそう書いても、普通の配列はいけても
arrayは通らないんだわ・・自分の書き方が間違ってるのかもしれんけど
https://wandbox.org/permlink/LBzgUfB6MRtk9P12
いや、受け側でそう書いても、普通の配列はいけても
arrayは通らないんだわ・・自分の書き方が間違ってるのかもしれんけど
https://wandbox.org/permlink/LBzgUfB6MRtk9P12
654デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 20:05:01.64ID:SRe/Pasd0 使ってるコンパイラのArrayヘッダの実装見てそのメンバ変数名をしらべてそれを指定すれば通る
655デフォルトの名無しさん (スフッ)
2019/07/04(木) 20:12:08.06ID:DFmBoT0+d reinterpret_castならいけたけど未定義かどうかは知らん
656デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 20:40:50.48ID:C9xm0dvc0 別に無理に通そうとしてるわけじゃないんだぜ
arrayの不備のひとつではないかな、ってだけ
arrayの不備のひとつではないかな、ってだけ
657デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 20:53:10.33ID:SRe/Pasd0 暗黙変換定義すれば出来るんだろうけど、出来ない方が自然な気がする
658デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 20:54:01.06ID:GHUD7qNB0659デフォルトの名無しさん (ワッチョイ)
2019/07/04(木) 21:48:13.92ID:WSU/R6xT0 確かに内部配列の参照を取得する手段はあってもいい気がする
先頭のポインタはdata()で取れるけど、配列型そのものへと読み替える手段って標準の範囲にはないんだな
ちょっと意外
先頭のポインタはdata()で取れるけど、配列型そのものへと読み替える手段って標準の範囲にはないんだな
ちょっと意外
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★2 [ぐれ★]
- 【中国局長】両国関係に「深刻な影響」 首相発言の撤回要求 [蚤の市★]
- 【卓球】早田ひな、「総額100万スられた」「ずっと憧れていたスペインとイタリア…」ヨーロッパ旅行で悲劇 スリ被害を告白 [muffin★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★3 [BFU★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 日経平均の下落率3%超す、財政懸念で長期金利上昇 ★2 [お断り★]
- 【実況】博衣こよりのえちえち歌枠🧪★2
- 産経新聞「高市早苗の答弁さぁ……思慮が足りてなくね?官僚と詰めずに思いつきで話しているでしょ」 [175344491]
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- 【画像】外務省局長「この度はうちの🦎がすみません…」中国「……」 [165981677]
- 【雑談】暇人集会所part18
- 外務省局長、よくわからないまま帰国へ [834922174]
