C++ åèæå
- C++11
- C++14
- C++17
- C++20
- C++ ç¼è¯å¨æ¯ææ åµè¡¨
- ç¬ç«ä¸å®¿ä¸»å®ç°
- C++ è¯è¨
- C++ å ³é®è¯
- é¢å¤çå¨
- C++ æ ååºå¤´æä»¶
- å ·åè¦æ±
- åè½ç¹æ§æµè¯ (C++20)
- å·¥å ·åº
- ç±»åæ¯æï¼åºæ¬ç±»åãRTTIãç±»åç¹æ§ï¼
- æ¦å¿µåº (C++20)
- é误å¤ç
- 卿å å管ç
- æ¥æåæ¶é´å·¥å ·
- å符串åº
- 容å¨åº
- è¿ä»£å¨åº
- èå´åº (C++20)
- std::ranges::begin
- std::ranges::cbegin
- std::ranges::end
- std::ranges::cend
- std::ranges::crbegin
- std::ranges::crend
- std::ranges::ssize
- std::ranges::data
- std::ranges::borrowed_range, std::ranges::enable_borrowed_range
- std::ranges::view, std::ranges::enable_view, std::ranges::view_base
- std::ranges::cdata
- std::ranges::iterator_t, std::ranges::sentinel_t, std::ranges::range_size_t, std::ranges::range_difference_t, std::ranges::range_value_t, std::ranges::range_reference_t, std::ranges::range_rvalue_reference_t
- std::ranges::dangling
- std::ranges::borrowed_iterator_t, std::ranges::borrowed_subrange_t
- std::ranges::range
- std::ranges::sized_range, std::ranges::disable_sized_range
- std::ranges::common_range
- std::ranges::viewable_range
- std::ranges::input_range
- std::ranges::output_range
- std::ranges::forward_range
- std::ranges::bidirectional_range
- std::ranges::random_access_range
- std::ranges::contiguous_range
- std::ranges::subrange
- 忣åå è£ (C++20)
- std::ranges::views::empty, std::ranges::empty_view
- std::ranges::views::iota, std::ranges::iota_view
- std::ranges::views::counted
- std::ranges::views::all_t, std::ranges::views::all
- std::ranges::ref_view
- std::ranges::views::transform, std::ranges::transform_view
- std::ranges::views::reverse, std::ranges::reverse_view
- std::ranges::views::filter, std::ranges::filter_view
- 注é
- ç®æ³åº
- æ°å¼åº
- è¾å ¥/è¾åºåº
- æä»¶ç³»ç»åº
- æ¬å°ååº
- æ£å表达å¼åº
- ååæä½åº
- çº¿ç¨æ¯æåº
- å®éªæ§ C++ ç¹æ§
- æç¨çèµæº
- ç´¢å¼
- std 符å·ç´¢å¼
- åç¨æ¯æ (C++20)
- C++ å ³é®è¯
ä½ç½®ï¼é¦é¡µ > C++ åèæå > èå´åº (C++20)
èå´åº (C++20)
èå´åºæä¾å¤çå ç´ èå´çç»ä»¶ï¼å æ¬åç§è§å¾éé å¨ã
| å®ä¹äºå¤´æä»¶ <ranges>
|
||
| namespace std { Â Â namespace views = ranges::views; |
||
æä¾å½å空é´å«å std::views ï¼ä½ä¸º std::ranges::views ç缩åã
| å®ä¹äºå¤´æä»¶
<ranges> | |
| å®ä¹äºå½å空é´
std::ranges | |
èå´è®¿é® | |
| (C++20) |
è¿åæåèå´èµ·å§çè¿ä»£å¨ (å®å¶ç¹å¯¹è±¡) |
| (C++20) |
è¿åæåèå´ç»å°¾çè¿ä»£å¨ (å®å¶ç¹å¯¹è±¡) |
| (C++20) |
è¿åæåèå´çéåè¿ä»£å¨ (å®å¶ç¹å¯¹è±¡) |
| (C++20) |
è¿åæåèå´çéåå°¾è¿ä»£å¨ (å®å¶ç¹å¯¹è±¡) |
| (C++20) |
è·å¾è½å¨å¸¸æ°æ¶é´å
计ç®å¤§å°çèå´çå¤§å° (å®å¶ç¹å¯¹è±¡) |
| (C++20) |
æ£æ¥èå´æ¯å¦ä¸ºç©º (å®å¶ç¹å¯¹è±¡) |
| (C++20) |
è·å¾æåè¿ç»èå´çèµ·å§çæé (å®å¶ç¹å¯¹è±¡) |
èå´åè¯ | |
| è·å¾èå´çå
³èç±»å (å«å模æ¿) | |
æ¬åè¿ä»£å¨å¤ç | |
| å ä½ç±»åï¼æç¤ºä¸åºè¿åè¿ä»£å¨æåèå´ï¼å 为å®å¯è½æ¬å (ç±») | |
| è·å¾å¡é borrowed_range çè¿ä»£å¨ç±»åæåèå´ç±»å (å«å模æ¿) | |
èå´æ¦å¿µ | |
æå®ç±»å为èå´ï¼å³å®åæ¶æä¾ begin è¿ä»£å¨å end å¨ä½ (æ¦å¿µ) | |
| æå®ç±»å为 range èä¸è½å®å
¨è¿åä»è¯¥ç±»å表达å¼è·å¾çè¿ä»£å¨èæ æ¬åä¹è (æ¦å¿µ) | |
| æå®èå´å¯å¨å¸¸æ°æ¶é´å
ç¥æå
¶å¤§å° (æ¦å¿µ) | |
| æå®èå´ä¸ºè§å¾ï¼å³å®æ¥æå¸¸æ°æ¶é´çå¤å¶/ç§»å¨/èµå¼ (æ¦å¿µ) | |
| æå®èå´çè¿ä»£å¨ç±»å满足 input_iterator (æ¦å¿µ) | |
| æå®èå´çè¿ä»£å¨ç±»å满足 output_iterator (æ¦å¿µ) | |
| æå®èå´çè¿ä»£å¨ç±»å满足 forward_iterator (æ¦å¿µ) | |
| æå®èå´çè¿ä»£å¨ç±»å满足 bidirectional_iterator (æ¦å¿µ) | |
| æå®èå´çè¿ä»£å¨ç±»å满足 random_access_iterator (æ¦å¿µ) | |
| æå®èå´çè¿ä»£å¨ç±»å满足 contiguous_iterator (æ¦å¿µ) | |
| æå®èå´æ¥æç¸åçè¿ä»£å¨åå¨ä½ç±»å (æ¦å¿µ) | |
| æå®é对 range çè¦æ±ï¼ä»¤å
¶å¯å®å
¨è½¬æ¢ä¸º view (æ¦å¿µ) | |
è§å¾ | |
| ç¨äºå®ä¹ view çè¾
å©ç±»æ¨¡æ¿ï¼ä½¿ç¨å¥ç¹éç°æ¨¡æ¿æ¨¡å¼ (类模æ¿) | |
| å°è¿ä»£å¨/å¨ä½å¯¹ç»å为ä¸ä¸ª view (类模æ¿) | |
èå´å·¥å
| å®ä¹äºå¤´æä»¶
<ranges> | |
| å®ä¹äºå½å空é´
std::ranges | |
| æ å
ç´ ç空 view (类模æ¿) (å鿍¡æ¿) | |
| 嫿å
·ææå®å¼çå个å
ç´ ç view (类模æ¿) (å®å¶ç¹å¯¹è±¡) | |
| ç±éè¿éå¤å¯¹æä¸ªåå¼èªå¢æçæçåºåç»æç view (类模æ¿) (å®å¶ç¹å¯¹è±¡) | |
| ä»è¿ä»£å¨å计æ°å建åèå´ (å®å¶ç¹å¯¹è±¡) | |
èå´éé å¨
èå´éé 卿¥å viewable_range ä¸ºå ¶ç¬¬ä¸åæ°å¹¶è¿åä¸ä¸ª view ã
è¥èå´éé å¨ä» æ¥æ¶ä¸ä¸ªåæ°ï¼åå®äº¦è¢«ç§°ä¸ºä½¿ç¨ç®¡éè¿ç®ç¬¦ï¼è¥ C æ¯èå´éé å¨å¯¹è±¡ä¸ R 为 viewable_range ï¼åæ¤äºè¡¨è¾¾å¼çä»·ï¼
C(R) R | C
亦è½è¿éä¸å èå´éé å¨ä»¥äº§çå¦ä¸èå´éé å¨ï¼è¥ C ä¸ D 为èå´éé å¨å¯¹è±¡ä¸ R 为 viewable_range ï¼å C | D 亦为èå´éé å¨å¯¹è±¡ï¼ä¸æ¤äºè¡¨è¾¾å¼çä»·ï¼
R | C | D // (R | C) | D R | (C | D)
è¥èå´éé 卿¥æ¶å¤ä¸ªåæ°ï¼åè¿äºå½¢å¼çä»·ï¼
adaptor(range, args...) adaptor(args...)(range) range | adaptor(args...)
æ¤æ åµä¸ï¼ adaptor(args...) 为ä¸å èå´éé å¨å¯¹è±¡ã
| å®ä¹äºå¤´æä»¶
<ranges> | |
| å®ä¹äºå½å空é´
std::ranges | |
| å
å« range çææå
ç´ ç view (å«å模æ¿) (èå´éé å¨å¯¹è±¡) | |
| æä¸ªå
¶ä» range çå
ç´ ç view (类模æ¿) | |
| ç± range 䏿»¡è¶³æä¸ªè°è¯çå
ç´ ææç view (类模æ¿) (èå´éé å¨å¯¹è±¡) | |
| 对åºåçæ¯ä¸ªå
ç´ åºç¨æä¸ªåæ¢å½æ°ç view (类模æ¿) (èå´éé å¨å¯¹è±¡) | |
| ç±å¦ä¸ view çå N 个å
ç´ ç»æç view (类模æ¿) (èå´éé å¨å¯¹è±¡) | |
ç±å¦ä¸ view çå°é¦ä¸ªè°è¯è¿å false 为æ¢çèµ·å§å
ç´ ç»æç view (类模æ¿) (èå´éé å¨å¯¹è±¡) | |
| ç±å¦ä¸ view è·³è¿é¦ N 个å
ç´ ç»æç view (类模æ¿) (èå´éé å¨å¯¹è±¡) | |
ç±å¦ä¸ view è·³è¿å
ç´ çèµ·å§åºåï¼ç´è³é¦ä¸ªè°è¯è¿å false çå
ç´ ç»æç view (类模æ¿) (èå´éé å¨å¯¹è±¡) | |
| ç±æå¹³ range ç view æè·å¾çåºåææç view (类模æ¿) (èå´éé å¨å¯¹è±¡) | |
| ç¨æä¸ªåé符åå²å¦ä¸ view æè·å¾çåèå´ç view (类模æ¿) (èå´éé å¨å¯¹è±¡) | |
| è½¬æ¢ view 为 common_range (类模æ¿) (èå´éé å¨å¯¹è±¡) | |
| 以éåºè¿ä»£å¦ä¸ååè§å¾ä¸çå
ç´ ç view (类模æ¿) (èå´éé å¨å¯¹è±¡) | |
ç±å¨å
³èçè¾å
¥æµä¸ç¸ç»§åºç¨ operator>> è·å¾çå
ç´ ç»æç view (类模æ¿) | |
| éå仿 tuple å¼ç»æç view åæ°å¼ N ï¼äº§çæ¯ä¸ª tuple ç第 N 个å
ç´ ç view (类模æ¿) (èå´éé å¨å¯¹è±¡) | |
| éå仿 pair å¼ç»æç view å¹¶äº§çæ¯ä¸ª pair ç第ä¸å
ç´ ç view (类模æ¿) (èå´éé å¨å¯¹è±¡) | |
| éå仿 pair å¼ç»æç view å¹¶äº§çæ¯ä¸ª pair ç第äºå
ç´ ç view (类模æ¿) (èå´éé å¨å¯¹è±¡) | |
æäºèå´éé å¨ç¨åæ£åå è£ å è£ å ¶å ç´ æå½æ°å¯¹è±¡ã
示ä¾
#include <vector> #include <ranges> #include <iostream> Â int main() { std::vector<int> ints{0,1,2,3,4,5}; auto even = [](int i){ return 0 == i % 2; }; auto square = [](int i) { return i * i; }; Â for (int i : ints | std::views::filter(even) | std::views::transform(square)) { std::cout << i << ' '; } }
è¾åºï¼
0 4 16