68
68
69
69
</ head >
70
70
< body >
71
- < header data-kunai-mdinfo ="{"meta": {"header": ["complex"], "namespace": ["std"], "id-type": ["class template"]}, "sources": [{"id": "3ff32c2b7b9c33d0a8532f9cbe7fc2d1c8e3aeb5", "source": "#include <iostream>\n#include <complex>\n\nfloat pi()\n{\n return 3.141593f;\n}\n\nint main()\n{\n // \u5b9f\u90e81.0f\u3001\u865a\u90e82.0f\u306e\u8907\u7d20\u6570\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u308b\n std::complex<float> c(1.0f, 2.0f);\n\n // \u30b9\u30c8\u30ea\u30fc\u30e0\u51fa\u529b\n std::cout << \"output : \" << c << std::endl;\n\n // \u5404\u8981\u7d20\u306e\u53d6\u5f97\n float real = c.real(); // \u5b9f\u90e8\n float imag = c.imag(); // \u865a\u90e8\n std::cout << \"real : \" << real << std::endl;\n std::cout << \"imag : \" << imag << std::endl;\n\n // \u6f14\u7b97\n std::complex<float> a(1.0f, 2.0f);\n std::complex<float> b(2.0f, 3.0f);\n std::cout << \"a + b : \" << a + b << std::endl;\n std::cout << \"a - b : \" << a - b << std::endl;\n std::cout << \"a * b : \" << a * b << std::endl;\n std::cout << \"a / b : \" << a / b << std::endl;\n\n // \u5404\u8907\u7d20\u6570\u306e\u5024\u3092\u53d6\u5f97\u3059\u308b\n std::cout << \"abs : \" << std::abs(c) << std::endl; // \u7d76\u5bfe\u5024\n std::cout << \"arg : \" << std::arg(c) << std::endl; // \u504f\u89d2\n std::cout << \"norm : \" << std::norm(c) << std::endl; // \u30ce\u30eb\u30e0\n std::cout << \"conj : \" << std::conj(c) << std::endl; // \u5171\u5f79\u8907\u7d20\u6570\n std::cout << \"proj : \" << std::proj(c) << std::endl; // \u30ea\u30fc\u30de\u30f3\u7403\u9762\u3078\u306e\u5c04\u5f71\n std::cout << \"polar : \" << std::polar(1.0f, pi() / 2.0f); // \u6975\u5ea7\u6a19(\u7d76\u5bfe\u5024\uff1a1.0\u3001\u504f\u89d2\uff1a\u5186\u5468\u7387\u00f72.0)\u304b\u3089\u8907\u7d20\u6570\u3092\u4f5c\u308b\n}\n"}], "page_id": ["reference", "complex", "complex"]} ">
71
+ < header data-kunai-mdinfo ="{"meta": {"header": ["complex"], "namespace": ["std"], "id-type": ["class template"]}, "sources": [{"id": "3ff32c2b7b9c33d0a8532f9cbe7fc2d1c8e3aeb5", "source": "#include <iostream>\n#include <complex>\n\nfloat pi()\n{\n return 3.141593f;\n}\n\nint main()\n{\n // \u5b9f\u90e81.0f\u3001\u865a\u90e82.0f\u306e\u8907\u7d20\u6570\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u308b\n std::complex<float> c(1.0f, 2.0f);\n\n // \u30b9\u30c8\u30ea\u30fc\u30e0\u51fa\u529b\n std::cout << \"output : \" << c << std::endl;\n\n // \u5404\u8981\u7d20\u306e\u53d6\u5f97\n float real = c.real(); // \u5b9f\u90e8\n float imag = c.imag(); // \u865a\u90e8\n std::cout << \"real : \" << real << std::endl;\n std::cout << \"imag : \" << imag << std::endl;\n\n // \u6f14\u7b97\n std::complex<float> a(1.0f, 2.0f);\n std::complex<float> b(2.0f, 3.0f);\n std::cout << \"a + b : \" << a + b << std::endl;\n std::cout << \"a - b : \" << a - b << std::endl;\n std::cout << \"a * b : \" << a * b << std::endl;\n std::cout << \"a / b : \" << a / b << std::endl;\n\n // \u5404\u8907\u7d20\u6570\u306e\u5024\u3092\u53d6\u5f97\u3059\u308b\n std::cout << \"abs : \" << std::abs(c) << std::endl; // \u7d76\u5bfe\u5024\n std::cout << \"arg : \" << std::arg(c) << std::endl; // \u504f\u89d2\n std::cout << \"norm : \" << std::norm(c) << std::endl; // \u30ce\u30eb\u30e0\n std::cout << \"conj : \" << std::conj(c) << std::endl; // \u5171\u5f79\u8907\u7d20\u6570\n std::cout << \"proj : \" << std::proj(c) << std::endl; // \u30ea\u30fc\u30de\u30f3\u7403\u9762\u3078\u306e\u5c04\u5f71\n std::cout << \"polar : \" << std::polar(1.0f, pi() / 2.0f); // \u6975\u5ea7\u6a19(\u7d76\u5bfe\u5024\uff1a1.0\u3001\u504f\u89d2\uff1a\u5186\u5468\u7387\u00f72.0)\u304b\u3089\u8907\u7d20\u6570\u3092\u4f5c\u308b\n}\n"}, {"id": "3ef18b2de5013754c308d830ec02bede9f3b4cff", "source": "#include <print>\n#include <complex>\n#include <vector>\n#include <ranges>\n\nint main()\n{\n // \u69cb\u9020\u5316\u675f\u7e1b\u3067\u5404\u8981\u7d20\u3092\u53d6\u5f97\u3059\u308b\n {\n std::complex<float> c{1.0f, 2.0f};\n auto [real, imag] = c;\n std::println(\"real:{} imag:{}\", real, imag);\n }\n\n // \u5b9a\u6570\u306e\u6dfb\u5b57\u3092\u6307\u5b9a\u3057\u3066\u5404\u8981\u7d20\u3092\u53d6\u5f97\u3059\u308b\n {\n std::complex<float> c{1.0f, 2.0f};\n float real = std::get<0>(c);\n float imag = std::get<1>(c);\n std::println(\"real:{} imag:{}\", real, imag);\n }\n\n // complex\u306e\u914d\u5217\u304b\u3089\u5b9f\u90e8\u306e\u307f\u3092\u62bd\u51fa\u3059\u308b\n {\n std::vector<std::complex<float>> v {\n {1.0f, 2.0f},\n {3.0f, 4.0f},\n {5.0f, 6.0f}\n };\n\n for (float real : v | std::views::elements<0>) {\n std::println(\"real:{}\", real);\n }\n }\n}\n"}], "page_id": ["reference", "complex", "complex"]} ">
72
72
< nav class ="navbar navbar-default " role ="navigation ">
73
73
< div class ="container-fluid ">
74
74
< div class ="navbar-header ">
188
188
189
189
< p class ="text-right "> < small >
190
190
最終更新日時(UTC):
191
- < span itemprop ="datePublished " content ="2023-03-03T10:21:37 ">
192
- 2023年03月03日 10時21分37秒
191
+ < span itemprop ="datePublished " content ="2024-08-02T06:00:52 ">
192
+ 2024年08月02日 06時00分52秒
193
193
</ span >
194
194
< br />
195
195
< span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
@@ -538,7 +538,35 @@ <h3>数学関数の<code>complex</code>に対するオーバーロード</h3>
538
538
</ tr >
539
539
</ tbody >
540
540
</ table >
541
+ < h2 > タプルインタフェースサポート</ h2 >
542
+ < table border ="1 " bordercolor ="#888 " style ="border-collapse:collapse ">
543
+ < thead >
544
+ < tr >
545
+ < th > 名前</ th >
546
+ < th > 説明</ th >
547
+ < th > 対応バージョン</ th >
548
+ </ tr >
549
+ </ thead >
550
+ < tbody >
551
+ < tr >
552
+ < td > < code > < a href ="complex/tuple_size.html "> tuple_size</ a > </ code > </ td >
553
+ < td > 静的な要素数取得(class template)</ td >
554
+ < td > C++26</ td >
555
+ </ tr >
556
+ < tr >
557
+ < td > < code > < a href ="complex/tuple_element.html "> tuple_element</ a > </ code > </ td >
558
+ < td > 静的な要素の型取得(class template)</ td >
559
+ < td > C++26</ td >
560
+ </ tr >
561
+ < tr >
562
+ < td > < code > < a href ="complex/get.html "> get</ a > </ code > </ td >
563
+ < td > 要素を取得する(function template)</ td >
564
+ < td > C++26</ td >
565
+ </ tr >
566
+ </ tbody >
567
+ </ table >
541
568
< h2 > 例</ h2 >
569
+ < h3 > 基本的な使い方</ h3 >
542
570
< p > < div class ="yata " id ="3ff32c2b7b9c33d0a8532f9cbe7fc2d1c8e3aeb5 "> < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../iostream.html "> <iostream></ a > </ span > < span class ="cp "> </ span >
543
571
< span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../complex.html "> <complex></ a > </ span > < span class ="cp "> </ span >
544
572
@@ -579,7 +607,7 @@ <h2>例</h2>
579
607
< span class ="p "> }</ span >
580
608
</ code > </ pre > </ div >
581
609
</ div > </ p >
582
- < h3 > 出力</ h3 >
610
+ < h4 > 出力</ h4 >
583
611
< p > < pre > < code > output : (1,2)
584
612
real : 1
585
613
imag : 2
@@ -594,6 +622,51 @@ <h3>出力</h3>
594
622
proj : (1,2)
595
623
polar : (-1.62921e-07,1)
596
624
</ code > </ pre > </ p >
625
+ < h3 > タプルインタフェースを使用する (C++26)</ h3 >
626
+ < p > < div class ="yata " id ="3ef18b2de5013754c308d830ec02bede9f3b4cff "> < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../print.html "> <print></ a > </ span > < span class ="cp "> </ span >
627
+ < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../complex.html "> <complex></ a > </ span > < span class ="cp "> </ span >
628
+ < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../vector.html "> <vector></ a > </ span > < span class ="cp "> </ span >
629
+ < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../ranges.html "> <ranges></ a > </ span > < span class ="cp "> </ span >
630
+
631
+ < span class ="kt "> int</ span > < span class ="nf "> main</ span > < span class ="p "> ()</ span >
632
+ < span class ="p "> {</ span >
633
+ < span class ="c1 "> // 構造化束縛で各要素を取得する</ span >
634
+ < span class ="p "> {</ span >
635
+ < span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> complex</ span > < span class ="o "> <</ span > < span class ="kt "> float</ span > < span class ="o "> ></ span > < span class ="n "> c</ span > < span class ="p "> {</ span > < span class ="mf "> 1.0f</ span > < span class ="p "> ,</ span > < span class ="mf "> 2.0f</ span > < span class ="p "> };</ span >
636
+ < span class ="k "> auto</ span > < span class ="p "> [</ span > < span class ="n "> real</ span > < span class ="p "> ,</ span > < span class ="n "> imag</ span > < span class ="p "> ]</ span > < span class ="o "> =</ span > < span class ="n "> c</ span > < span class ="p "> ;</ span >
637
+ < span class ="n "> < a href ="../print/println.html "> std::println</ a > </ span > < span class ="p "> (</ span > < span class ="s "> "real:{} imag:{}"</ span > < span class ="p "> ,</ span > < span class ="n "> real</ span > < span class ="p "> ,</ span > < span class ="n "> imag</ span > < span class ="p "> );</ span >
638
+ < span class ="p "> }</ span >
639
+
640
+ < span class ="c1 "> // 定数の添字を指定して各要素を取得する</ span >
641
+ < span class ="p "> {</ span >
642
+ < span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> complex</ span > < span class ="o "> <</ span > < span class ="kt "> float</ span > < span class ="o "> ></ span > < span class ="n "> c</ span > < span class ="p "> {</ span > < span class ="mf "> 1.0f</ span > < span class ="p "> ,</ span > < span class ="mf "> 2.0f</ span > < span class ="p "> };</ span >
643
+ < span class ="kt "> float</ span > < span class ="n "> real</ span > < span class ="o "> =</ span > < span class ="n "> < a href ="complex/get.html "> std::get</ a > </ span > < span class ="o "> <</ span > < span class ="mi "> 0</ span > < span class ="o "> ></ span > < span class ="p "> (</ span > < span class ="n "> c</ span > < span class ="p "> );</ span >
644
+ < span class ="kt "> float</ span > < span class ="n "> imag</ span > < span class ="o "> =</ span > < span class ="n "> < a href ="complex/get.html "> std::get</ a > </ span > < span class ="o "> <</ span > < span class ="mi "> 1</ span > < span class ="o "> ></ span > < span class ="p "> (</ span > < span class ="n "> c</ span > < span class ="p "> );</ span >
645
+ < span class ="n "> < a href ="../print/println.html "> std::println</ a > </ span > < span class ="p "> (</ span > < span class ="s "> "real:{} imag:{}"</ span > < span class ="p "> ,</ span > < span class ="n "> real</ span > < span class ="p "> ,</ span > < span class ="n "> imag</ span > < span class ="p "> );</ span >
646
+ < span class ="p "> }</ span >
647
+
648
+ < span class ="c1 "> // complexの配列から実部のみを抽出する</ span >
649
+ < span class ="p "> {</ span >
650
+ < span class ="n "> < a href ="../vector/vector.html "> std::vector</ a > </ span > < span class ="o "> <</ span > < span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> complex</ span > < span class ="o "> <</ span > < span class ="kt "> float</ span > < span class ="o "> >></ span > < span class ="n "> v</ span > < span class ="p "> {</ span >
651
+ < span class ="p "> {</ span > < span class ="mf "> 1.0f</ span > < span class ="p "> ,</ span > < span class ="mf "> 2.0f</ span > < span class ="p "> },</ span >
652
+ < span class ="p "> {</ span > < span class ="mf "> 3.0f</ span > < span class ="p "> ,</ span > < span class ="mf "> 4.0f</ span > < span class ="p "> },</ span >
653
+ < span class ="p "> {</ span > < span class ="mf "> 5.0f</ span > < span class ="p "> ,</ span > < span class ="mf "> 6.0f</ span > < span class ="p "> }</ span >
654
+ < span class ="p "> };</ span >
655
+
656
+ < span class ="k "> for</ span > < span class ="p "> (</ span > < span class ="kt "> float</ span > < span class ="nl "> real</ span > < span class ="p "> :</ span > < span class ="n "> v</ span > < span class ="o "> |</ span > < span class ="n "> < a href ="../ranges/elements_view.html "> std::views::elements</ a > </ span > < span class ="o "> <</ span > < span class ="mi "> 0</ span > < span class ="o "> ></ span > < span class ="p "> )</ span > < span class ="p "> {</ span >
657
+ < span class ="n "> < a href ="../print/println.html "> std::println</ a > </ span > < span class ="p "> (</ span > < span class ="s "> "real:{}"</ span > < span class ="p "> ,</ span > < span class ="n "> real</ span > < span class ="p "> );</ span >
658
+ < span class ="p "> }</ span >
659
+ < span class ="p "> }</ span >
660
+ < span class ="p "> }</ span >
661
+ </ code > </ pre > </ div >
662
+ </ div > </ p >
663
+ < h4 > 出力</ h4 >
664
+ < p > < pre > < code > real:1 imag:2
665
+ real:1 imag:2
666
+ real:1
667
+ real:3
668
+ real:5
669
+ </ code > </ pre > </ p >
597
670
< h2 > 参照</ h2 >
598
671
< ul >
599
672
< li > < a href ="https://ja.wikipedia.org/wiki/複素数 " target ="_blank "> 複素数 - Wikipedia</ a > </ li >
@@ -608,6 +681,10 @@ <h2>参照</h2>
608
681
< li > C++23で< a class ="cpprefjp-defined-word " data-desc ="<stdfloat>で定義される内部表現の規定された浮動小数点数型 " href ="../stdfloat.html "> 拡張浮動小数点数型</ a > に対応した</ li >
609
682
</ ul >
610
683
</ li >
684
+ < li > < a href ="https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2819r2.pdf " target ="_blank "> P2819R2 Add tuple protocol to complex</ a > < ul >
685
+ < li > C++26から< code > std::complex</ code > にタプルインタフェースがサポートされた</ li >
686
+ </ ul >
687
+ </ li >
611
688
</ ul > </ div >
612
689
613
690
</ div >
0 commit comments