In this tutorial we learn how elements of an RVec can be easily sorted and selected.
Author: Stefan Wunsch
This notebook tutorial was automatically generated with ROOTBOOK-izer from the macro found in the ROOT repository on Tuesday, March 19, 2024 at 07:22 PM.
Because RVec implements an iterator, the class is fully compatible with the sorting algorithms in the standard library.
ROOT::RVecD v1{6., 4., 5.};
ROOT::RVecD v2(v1);
std::sort(v2.begin(), v2.end());
std::cout << "Sort vector " << v1 << ": " << v2 << std::endl;
Sort vector { 6, 4, 5 }: { 4, 5, 6 }
For convenience, ROOT implements helpers, e.g., to get a sorted copy of an RVec ...
auto v3 = Sort(v1);
std::cout << "Sort vector " << v1 << ": " << v3 << std::endl;
input_line_52:2:2: error: Syntax error auto v3 = Sort(v1); ^ FunctionDecl 0x7f82c10032f8 <input_line_52:1:1, line:5:1> line:1:6 __cling_Un1Qu320 'void (void *)' |-ParmVarDecl 0x7f82c1003240 <col:23, col:29> col:29 vpClingValue 'void *' |-CompoundStmt 0x7f82c10099a0 <col:43, line:5:1> | |-DeclStmt 0x7f82c10036e8 <line:2:2, col:20> | | `-VarDecl 0x7f82c1003410 <col:2, col:19> col:7 used v3 'auto' cinit | | `-CallExpr 0x7f82c10036c0 <col:12, col:19> '<dependent type>' | | |-DeclRefExpr 0x7f82c1003660 <col:12> '<dependent type>' lvalue Var 0x7f82c1003588 'Sort' '<dependent type>' | | `-DeclRefExpr 0x7f82c10036a0 <col:17> 'ROOT::RVecD':'ROOT::VecOps::RVec<double>' lvalue Var 0x8027650 'v1' 'ROOT::RVecD':'ROOT::VecOps::RVec<double>' | |-CXXOperatorCallExpr 0x7f82c1009960 <line:3:1, col:57> '<dependent type>' '<<' | | |-UnresolvedLookupExpr 0x7f82c1009620 <col:49> '<overloaded function type>' lvalue (ADL) = 'operator<<' 0x400be58 0x3fbc898 0x3fbc1f8 0x4009418 0x40096a0 0x4009930 0x4009bc0 0x4009e50 0x400a0e0 0x400a370 0x400a600 0x400a890 0x400ab20 0x400adb0 0x400b040 0x400b2d0 0x400b560 0x400b828 0x54f9608 0x54fbc78 0x5502f18 0x5503e08 0x5511288 0x55115a8 0x5523a38 0x5524b38 0x5525e78 0x5527248 0x5528588 0x55298c8 0x552b970 0x5784e98 0x5786878 0x5969688 0x44ed850 0x450e338 0x493ed88 0x49e8c30 0x4a378a8 0x4a37f48 0x4a385e8 0x4a38c78 0x4a39280 0x4a39890 0x4a40b00 0x4a3a610 0x4a3ac20 0x4a3b260 0x4a3f6e8 0x4a89590 0x4741e10 0x4bb19b8 0x4c55718 0x4cac3a8 0x4cad448 0x4cae4c8 0x4cafa38 0x4cb0b48 0x4cb1bc8 0x4cb3ae0 0x4cb4bc0 0x4da8728 0x4de1b28 0x4db4db8 0x4db5d18 0x4db6c78 0x4db7be8 0x4e04d68 0x4db82d8 0x4e1ac88 0x4db9238 0x4dba198 0x4dbb0f8 0x4dc2368 0x4deb7a8 0x4deddd0 0x4df04a8 0x4dfb268 0x4dfdf38 0x4e01728 0x4e0e988 0x4e114e0 0x4e15808 0x4e181c8 0x4e27db8 0x4e2cb28 0x4e317c8 0x5283460 0x4fb3518 0x4fb41b0 0x4fb4c18 0x4fb5678 0x4fb6168 0x5057c20 0x5058680 0x5059080 | | |-CXXOperatorCallExpr 0x7f82c1009580 <col:1, col:46> '<dependent type>' '<<' | | | |-UnresolvedLookupExpr 0x7f82c1009240 <col:43> '<overloaded function type>' lvalue (ADL) = 'operator<<' 0x400be58 0x3fbc898 0x3fbc1f8 0x4009418 0x40096a0 0x4009930 0x4009bc0 0x4009e50 0x400a0e0 0x400a370 0x400a600 0x400a890 0x400ab20 0x400adb0 0x400b040 0x400b2d0 0x400b560 0x400b828 0x54f9608 0x54fbc78 0x5502f18 0x5503e08 0x5511288 0x55115a8 0x5523a38 0x5524b38 0x5525e78 0x5527248 0x5528588 0x55298c8 0x552b970 0x5784e98 0x5786878 0x5969688 0x44ed850 0x450e338 0x493ed88 0x49e8c30 0x4a378a8 0x4a37f48 0x4a385e8 0x4a38c78 0x4a39280 0x4a39890 0x4a40b00 0x4a3a610 0x4a3ac20 0x4a3b260 0x4a3f6e8 0x4a89590 0x4741e10 0x4bb19b8 0x4c55718 0x4cac3a8 0x4cad448 0x4cae4c8 0x4cafa38 0x4cb0b48 0x4cb1bc8 0x4cb3ae0 0x4cb4bc0 0x4da8728 0x4de1b28 0x4db4db8 0x4db5d18 0x4db6c78 0x4db7be8 0x4e04d68 0x4db82d8 0x4e1ac88 0x4db9238 0x4dba198 0x4dbb0f8 0x4dc2368 0x4deb7a8 0x4deddd0 0x4df04a8 0x4dfb268 0x4dfdf38 0x4e01728 0x4e0e988 0x4e114e0 0x4e15808 0x4e181c8 0x4e27db8 0x4e2cb28 0x4e317c8 0x5283460 0x4fb3518 0x4fb41b0 0x4fb4c18 0x4fb5678 0x4fb6168 0x5057c20 0x5058680 0x5059080 | | | |-CXXOperatorCallExpr 0x7f82c10091c8 <col:1, col:38> 'basic_ostream<char, char_traits<char> >':'std::basic_ostream<char>' lvalue '<<' | | | | |-ImplicitCastExpr 0x7f82c10091b0 <col:35> 'basic_ostream<char, char_traits<char> > &(*)(basic_ostream<char, char_traits<char> > &, const char *)' <FunctionToPointerDecay> | | | | | `-DeclRefExpr 0x7f82c1009190 <col:35> 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' lvalue Function 0x7f82c0058b48 'operator<<' 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' | | | | |-CXXOperatorCallExpr 0x7f82c1007978 <col:1, col:32> 'std::ostream':'std::basic_ostream<char>' lvalue '<<' adl | | | | | |-ImplicitCastExpr 0x7f82c1007960 <col:29> 'std::ostream &(*)(std::ostream &, const RVec<double> &)' <FunctionToPointerDecay> | | | | | | `-DeclRefExpr 0x7f82c1007940 <col:29> 'std::ostream &(std::ostream &, const RVec<double> &)' lvalue Function 0x7f82c0063f28 'operator<<' 'std::ostream &(std::ostream &, const RVec<double> &)' | | | | | |-CXXOperatorCallExpr 0x7f82c1004f98 <col:1, col:14> 'basic_ostream<char, char_traits<char> >':'std::basic_ostream<char>' lvalue '<<' | | | | | | |-ImplicitCastExpr 0x7f82c1004f80 <col:11> 'basic_ostream<char, char_traits<char> > &(*)(basic_ostream<char, char_traits<char> > &, const char *)' <FunctionToPointerDecay> | | | | | | | `-DeclRefExpr 0x7f82c1004f60 <col:11> 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' lvalue Function 0x7f82c0058b48 'operator<<' 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' | | | | | | |-DeclRefExpr 0x7f82c1003750 <col:1, col:6> 'ostream':'std::basic_ostream<char>' lvalue Var 0x4ccd128 'cout' 'ostream':'std::basic_ostream<char>' | | | | | | `-ImplicitCastExpr 0x7f82c1004f48 <col:14> 'const char *' <ArrayToPointerDecay> | | | | | | `-StringLiteral 0x7f82c1003780 <col:14> 'const char[13]' lvalue "Sort vector " | | | | | `-ImplicitCastExpr 0x7f82c1007928 <col:32> 'const RVec<double>':'const ROOT::VecOps::RVec<double>' lvalue <NoOp> | | | | | `-DeclRefExpr 0x7f82c1004fd0 <col:32> 'ROOT::RVecD':'ROOT::VecOps::RVec<double>' lvalue Var 0x8027650 'v1' 'ROOT::RVecD':'ROOT::VecOps::RVec<double>' | | | | `-ImplicitCastExpr 0x7f82c1009178 <col:38> 'const char *' <ArrayToPointerDecay> | | | | `-StringLiteral 0x7f82c10079b0 <col:38> 'const char[3]' lvalue ": " | | | `-DeclRefExpr 0x7f82c1009200 <col:46> 'auto' lvalue Var 0x7f82c1003410 'v3' 'auto' | | `-UnresolvedLookupExpr 0x7f82c10095d8 <col:52, col:57> '<overloaded function type>' lvalue (no ADL) = 'endl' 0x4a3b8a0 | `-NullStmt 0x7f82c1009998 <line:4:1> |-AnnotateAttr 0x7f82c10034e8 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" `-AnnotateAttr 0x7f82c10035f0 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" <<<NULL>>>
... or a reversed copy of an RVec.
auto v4 = Reverse(v1);
std::cout << "Reverse vector " << v1 << ": " << v4 << std::endl;
input_line_53:2:2: error: Syntax error auto v4 = Reverse(v1); ^ FunctionDecl 0x7f82c23beaf0 <input_line_53:1:1, line:5:1> line:1:6 __cling_Un1Qu321 'void (void *)' |-ParmVarDecl 0x7f82c23bea38 <col:23, col:29> col:29 vpClingValue 'void *' |-CompoundStmt 0x7f82c23c5e50 <col:43, line:5:1> | |-DeclStmt 0x7f82c23beee8 <line:2:2, col:23> | | `-VarDecl 0x7f82c23bec08 <col:2, col:22> col:7 used v4 'auto' cinit | | `-CallExpr 0x7f82c23beec0 <col:12, col:22> '<dependent type>' | | |-DeclRefExpr 0x7f82c23bee60 <col:12> '<dependent type>' lvalue Var 0x7f82c23bed88 'Reverse' '<dependent type>' | | `-DeclRefExpr 0x7f82c23beea0 <col:20> 'ROOT::RVecD':'ROOT::VecOps::RVec<double>' lvalue Var 0x8027650 'v1' 'ROOT::RVecD':'ROOT::VecOps::RVec<double>' | |-CXXOperatorCallExpr 0x7f82c23c5e10 <line:3:1, col:60> '<dependent type>' '<<' | | |-UnresolvedLookupExpr 0x7f82c23c5ad0 <col:52> '<overloaded function type>' lvalue (ADL) = 'operator<<' 0x400be58 0x3fbc898 0x3fbc1f8 0x4009418 0x40096a0 0x4009930 0x4009bc0 0x4009e50 0x400a0e0 0x400a370 0x400a600 0x400a890 0x400ab20 0x400adb0 0x400b040 0x400b2d0 0x400b560 0x400b828 0x54f9608 0x54fbc78 0x5502f18 0x5503e08 0x5511288 0x55115a8 0x5523a38 0x5524b38 0x5525e78 0x5527248 0x5528588 0x55298c8 0x552b970 0x5784e98 0x5786878 0x5969688 0x44ed850 0x450e338 0x493ed88 0x49e8c30 0x4a378a8 0x4a37f48 0x4a385e8 0x4a38c78 0x4a39280 0x4a39890 0x4a40b00 0x4a3a610 0x4a3ac20 0x4a3b260 0x4a3f6e8 0x4a89590 0x4741e10 0x4bb19b8 0x4c55718 0x4cac3a8 0x4cad448 0x4cae4c8 0x4cafa38 0x4cb0b48 0x4cb1bc8 0x4cb3ae0 0x4cb4bc0 0x4da8728 0x4de1b28 0x4db4db8 0x4db5d18 0x4db6c78 0x4db7be8 0x4e04d68 0x4db82d8 0x4e1ac88 0x4db9238 0x4dba198 0x4dbb0f8 0x4dc2368 0x4deb7a8 0x4deddd0 0x4df04a8 0x4dfb268 0x4dfdf38 0x4e01728 0x4e0e988 0x4e114e0 0x4e15808 0x4e181c8 0x4e27db8 0x4e2cb28 0x4e317c8 0x5283460 0x4fb3518 0x4fb41b0 0x4fb4c18 0x4fb5678 0x4fb6168 0x5057c20 0x5058680 0x5059080 | | |-CXXOperatorCallExpr 0x7f82c23c5a30 <col:1, col:49> '<dependent type>' '<<' | | | |-UnresolvedLookupExpr 0x7f82c23c56f0 <col:46> '<overloaded function type>' lvalue (ADL) = 'operator<<' 0x400be58 0x3fbc898 0x3fbc1f8 0x4009418 0x40096a0 0x4009930 0x4009bc0 0x4009e50 0x400a0e0 0x400a370 0x400a600 0x400a890 0x400ab20 0x400adb0 0x400b040 0x400b2d0 0x400b560 0x400b828 0x54f9608 0x54fbc78 0x5502f18 0x5503e08 0x5511288 0x55115a8 0x5523a38 0x5524b38 0x5525e78 0x5527248 0x5528588 0x55298c8 0x552b970 0x5784e98 0x5786878 0x5969688 0x44ed850 0x450e338 0x493ed88 0x49e8c30 0x4a378a8 0x4a37f48 0x4a385e8 0x4a38c78 0x4a39280 0x4a39890 0x4a40b00 0x4a3a610 0x4a3ac20 0x4a3b260 0x4a3f6e8 0x4a89590 0x4741e10 0x4bb19b8 0x4c55718 0x4cac3a8 0x4cad448 0x4cae4c8 0x4cafa38 0x4cb0b48 0x4cb1bc8 0x4cb3ae0 0x4cb4bc0 0x4da8728 0x4de1b28 0x4db4db8 0x4db5d18 0x4db6c78 0x4db7be8 0x4e04d68 0x4db82d8 0x4e1ac88 0x4db9238 0x4dba198 0x4dbb0f8 0x4dc2368 0x4deb7a8 0x4deddd0 0x4df04a8 0x4dfb268 0x4dfdf38 0x4e01728 0x4e0e988 0x4e114e0 0x4e15808 0x4e181c8 0x4e27db8 0x4e2cb28 0x4e317c8 0x5283460 0x4fb3518 0x4fb41b0 0x4fb4c18 0x4fb5678 0x4fb6168 0x5057c20 0x5058680 0x5059080 | | | |-CXXOperatorCallExpr 0x7f82c23c5678 <col:1, col:41> 'basic_ostream<char, char_traits<char> >':'std::basic_ostream<char>' lvalue '<<' | | | | |-ImplicitCastExpr 0x7f82c23c5660 <col:38> 'basic_ostream<char, char_traits<char> > &(*)(basic_ostream<char, char_traits<char> > &, const char *)' <FunctionToPointerDecay> | | | | | `-DeclRefExpr 0x7f82c23c5640 <col:38> 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' lvalue Function 0x7f82c0058b48 'operator<<' 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' | | | | |-CXXOperatorCallExpr 0x7f82c23c3e28 <col:1, col:35> 'std::ostream':'std::basic_ostream<char>' lvalue '<<' adl | | | | | |-ImplicitCastExpr 0x7f82c23c3e10 <col:32> 'std::ostream &(*)(std::ostream &, const RVec<double> &)' <FunctionToPointerDecay> | | | | | | `-DeclRefExpr 0x7f82c23c3df0 <col:32> 'std::ostream &(std::ostream &, const RVec<double> &)' lvalue Function 0x7f82c0063f28 'operator<<' 'std::ostream &(std::ostream &, const RVec<double> &)' | | | | | |-CXXOperatorCallExpr 0x7f82c23c1448 <col:1, col:14> 'basic_ostream<char, char_traits<char> >':'std::basic_ostream<char>' lvalue '<<' | | | | | | |-ImplicitCastExpr 0x7f82c23c1430 <col:11> 'basic_ostream<char, char_traits<char> > &(*)(basic_ostream<char, char_traits<char> > &, const char *)' <FunctionToPointerDecay> | | | | | | | `-DeclRefExpr 0x7f82c23c1410 <col:11> 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' lvalue Function 0x7f82c0058b48 'operator<<' 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' | | | | | | |-DeclRefExpr 0x7f82c23bef50 <col:1, col:6> 'ostream':'std::basic_ostream<char>' lvalue Var 0x4ccd128 'cout' 'ostream':'std::basic_ostream<char>' | | | | | | `-ImplicitCastExpr 0x7f82c23c13f8 <col:14> 'const char *' <ArrayToPointerDecay> | | | | | | `-StringLiteral 0x7f82c23befb8 <col:14> 'const char[16]' lvalue "Reverse vector " | | | | | `-ImplicitCastExpr 0x7f82c23c3dd8 <col:35> 'const RVec<double>':'const ROOT::VecOps::RVec<double>' lvalue <NoOp> | | | | | `-DeclRefExpr 0x7f82c23c1480 <col:35> 'ROOT::RVecD':'ROOT::VecOps::RVec<double>' lvalue Var 0x8027650 'v1' 'ROOT::RVecD':'ROOT::VecOps::RVec<double>' | | | | `-ImplicitCastExpr 0x7f82c23c5628 <col:41> 'const char *' <ArrayToPointerDecay> | | | | `-StringLiteral 0x7f82c23c3e60 <col:41> 'const char[3]' lvalue ": " | | | `-DeclRefExpr 0x7f82c23c56b0 <col:49> 'auto' lvalue Var 0x7f82c23bec08 'v4' 'auto' | | `-UnresolvedLookupExpr 0x7f82c23c5a88 <col:55, col:60> '<overloaded function type>' lvalue (no ADL) = 'endl' 0x4a3b8a0 | `-NullStmt 0x7f82c23c5e48 <line:4:1> |-AnnotateAttr 0x7f82c23bece0 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" `-AnnotateAttr 0x7f82c23bedf0 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" <<<NULL>>>
Helpers are provided to get the indices that sort the vector and to select these indices from an RVec.
auto i = Argsort(v1);
std::cout << "Indices that sort the vector " << v1 << ": " << i << std::endl;
ROOT::RVecD v5{9., 7., 8.};
auto v6 = Take(v5, i);
std::cout << "Sort vector " << v5 << " respective to the previously"
<< " determined indices: " << v6 << std::endl;
input_line_54:2:2: error: Syntax error auto i = Argsort(v1); ^ FunctionDecl 0x7f82c23c5f80 <input_line_54:1:1, line:10:1> line:1:6 __cling_Un1Qu322 'void (void *)' |-ParmVarDecl 0x7f82c23c5ec8 <col:23, col:29> col:29 vpClingValue 'void *' |-CompoundStmt 0x7f82c23d6410 <col:43, line:10:1> | |-DeclStmt 0x7f82c23c6378 <line:2:2, col:22> | | `-VarDecl 0x7f82c23c6098 <col:2, col:21> col:7 used i 'auto' cinit | | `-CallExpr 0x7f82c23c6350 <col:11, col:21> '<dependent type>' | | |-DeclRefExpr 0x7f82c23c62f0 <col:11> '<dependent type>' lvalue Var 0x7f82c23c6218 'Argsort' '<dependent type>' | | `-DeclRefExpr 0x7f82c23c6330 <col:19> 'ROOT::RVecD':'ROOT::VecOps::RVec<double>' lvalue Var 0x8027650 'v1' 'ROOT::RVecD':'ROOT::VecOps::RVec<double>' | |-CXXOperatorCallExpr 0x7f82c23cd670 <line:3:1, col:73> '<dependent type>' '<<' | | |-UnresolvedLookupExpr 0x7f82c23cd330 <col:65> '<overloaded function type>' lvalue (ADL) = 'operator<<' 0x400be58 0x3fbc898 0x3fbc1f8 0x4009418 0x40096a0 0x4009930 0x4009bc0 0x4009e50 0x400a0e0 0x400a370 0x400a600 0x400a890 0x400ab20 0x400adb0 0x400b040 0x400b2d0 0x400b560 0x400b828 0x54f9608 0x54fbc78 0x5502f18 0x5503e08 0x5511288 0x55115a8 0x5523a38 0x5524b38 0x5525e78 0x5527248 0x5528588 0x55298c8 0x552b970 0x5784e98 0x5786878 0x5969688 0x44ed850 0x450e338 0x493ed88 0x49e8c30 0x4a378a8 0x4a37f48 0x4a385e8 0x4a38c78 0x4a39280 0x4a39890 0x4a40b00 0x4a3a610 0x4a3ac20 0x4a3b260 0x4a3f6e8 0x4a89590 0x4741e10 0x4bb19b8 0x4c55718 0x4cac3a8 0x4cad448 0x4cae4c8 0x4cafa38 0x4cb0b48 0x4cb1bc8 0x4cb3ae0 0x4cb4bc0 0x4da8728 0x4de1b28 0x4db4db8 0x4db5d18 0x4db6c78 0x4db7be8 0x4e04d68 0x4db82d8 0x4e1ac88 0x4db9238 0x4dba198 0x4dbb0f8 0x4dc2368 0x4deb7a8 0x4deddd0 0x4df04a8 0x4dfb268 0x4dfdf38 0x4e01728 0x4e0e988 0x4e114e0 0x4e15808 0x4e181c8 0x4e27db8 0x4e2cb28 0x4e317c8 0x5283460 0x4fb3518 0x4fb41b0 0x4fb4c18 0x4fb5678 0x4fb6168 0x5057c20 0x5058680 0x5059080 | | |-CXXOperatorCallExpr 0x7f82c23cd290 <col:1, col:63> '<dependent type>' '<<' | | | |-UnresolvedLookupExpr 0x7f82c23ccf50 <col:60> '<overloaded function type>' lvalue (ADL) = 'operator<<' 0x400be58 0x3fbc898 0x3fbc1f8 0x4009418 0x40096a0 0x4009930 0x4009bc0 0x4009e50 0x400a0e0 0x400a370 0x400a600 0x400a890 0x400ab20 0x400adb0 0x400b040 0x400b2d0 0x400b560 0x400b828 0x54f9608 0x54fbc78 0x5502f18 0x5503e08 0x5511288 0x55115a8 0x5523a38 0x5524b38 0x5525e78 0x5527248 0x5528588 0x55298c8 0x552b970 0x5784e98 0x5786878 0x5969688 0x44ed850 0x450e338 0x493ed88 0x49e8c30 0x4a378a8 0x4a37f48 0x4a385e8 0x4a38c78 0x4a39280 0x4a39890 0x4a40b00 0x4a3a610 0x4a3ac20 0x4a3b260 0x4a3f6e8 0x4a89590 0x4741e10 0x4bb19b8 0x4c55718 0x4cac3a8 0x4cad448 0x4cae4c8 0x4cafa38 0x4cb0b48 0x4cb1bc8 0x4cb3ae0 0x4cb4bc0 0x4da8728 0x4de1b28 0x4db4db8 0x4db5d18 0x4db6c78 0x4db7be8 0x4e04d68 0x4db82d8 0x4e1ac88 0x4db9238 0x4dba198 0x4dbb0f8 0x4dc2368 0x4deb7a8 0x4deddd0 0x4df04a8 0x4dfb268 0x4dfdf38 0x4e01728 0x4e0e988 0x4e114e0 0x4e15808 0x4e181c8 0x4e27db8 0x4e2cb28 0x4e317c8 0x5283460 0x4fb3518 0x4fb41b0 0x4fb4c18 0x4fb5678 0x4fb6168 0x5057c20 0x5058680 0x5059080 | | | |-CXXOperatorCallExpr 0x7f82c23cced8 <col:1, col:55> 'basic_ostream<char, char_traits<char> >':'std::basic_ostream<char>' lvalue '<<' | | | | |-ImplicitCastExpr 0x7f82c23ccec0 <col:52> 'basic_ostream<char, char_traits<char> > &(*)(basic_ostream<char, char_traits<char> > &, const char *)' <FunctionToPointerDecay> | | | | | `-DeclRefExpr 0x7f82c23ccea0 <col:52> 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' lvalue Function 0x7f82c0058b48 'operator<<' 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' | | | | |-CXXOperatorCallExpr 0x7f82c23cb688 <col:1, col:49> 'std::ostream':'std::basic_ostream<char>' lvalue '<<' adl | | | | | |-ImplicitCastExpr 0x7f82c23cb670 <col:46> 'std::ostream &(*)(std::ostream &, const RVec<double> &)' <FunctionToPointerDecay> | | | | | | `-DeclRefExpr 0x7f82c23cb650 <col:46> 'std::ostream &(std::ostream &, const RVec<double> &)' lvalue Function 0x7f82c0063f28 'operator<<' 'std::ostream &(std::ostream &, const RVec<double> &)' | | | | | |-CXXOperatorCallExpr 0x7f82c23c8ca8 <col:1, col:14> 'basic_ostream<char, char_traits<char> >':'std::basic_ostream<char>' lvalue '<<' | | | | | | |-ImplicitCastExpr 0x7f82c23c8c90 <col:11> 'basic_ostream<char, char_traits<char> > &(*)(basic_ostream<char, char_traits<char> > &, const char *)' <FunctionToPointerDecay> | | | | | | | `-DeclRefExpr 0x7f82c23c8c70 <col:11> 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' lvalue Function 0x7f82c0058b48 'operator<<' 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' | | | | | | |-DeclRefExpr 0x7f82c23c63e0 <col:1, col:6> 'ostream':'std::basic_ostream<char>' lvalue Var 0x4ccd128 'cout' 'ostream':'std::basic_ostream<char>' | | | | | | `-ImplicitCastExpr 0x7f82c23c8c58 <col:14> 'const char *' <ArrayToPointerDecay> | | | | | | `-StringLiteral 0x7f82c23c6488 <col:14> 'const char[30]' lvalue "Indices that sort the vector " | | | | | `-ImplicitCastExpr 0x7f82c23cb638 <col:49> 'const RVec<double>':'const ROOT::VecOps::RVec<double>' lvalue <NoOp> | | | | | `-DeclRefExpr 0x7f82c23c8ce0 <col:49> 'ROOT::RVecD':'ROOT::VecOps::RVec<double>' lvalue Var 0x8027650 'v1' 'ROOT::RVecD':'ROOT::VecOps::RVec<double>' | | | | `-ImplicitCastExpr 0x7f82c23cce88 <col:55> 'const char *' <ArrayToPointerDecay> | | | | `-StringLiteral 0x7f82c23cb6c0 <col:55> 'const char[3]' lvalue ": " | | | `-DeclRefExpr 0x7f82c23ccf10 <col:63> 'auto' lvalue Var 0x7f82c23c6098 'i' 'auto' | | `-UnresolvedLookupExpr 0x7f82c23cd2e8 <col:68, col:73> '<overloaded function type>' lvalue (no ADL) = 'endl' 0x4a3b8a0 | |-DeclStmt 0x7f82c23cd908 <line:5:1, col:27> | | `-VarDecl 0x7f82c23cd6f8 <col:1, col:26> col:13 used v5 'ROOT::RVecD':'ROOT::VecOps::RVec<double>' listinit destroyed | | `-ExprWithCleanups 0x7f82c23cd8d0 <col:13, col:26> 'ROOT::RVecD':'ROOT::VecOps::RVec<double>' | | `-CXXConstructExpr 0x7f82c23cd8a0 <col:13, col:26> 'ROOT::RVecD':'ROOT::VecOps::RVec<double>' 'void (std::initializer_list<double>)' list std::initializer_list | | `-CXXStdInitializerListExpr 0x7f82c23cd888 <col:15, col:26> 'std::initializer_list<double>':'std::initializer_list<double>' | | `-MaterializeTemporaryExpr 0x7f82c23cd870 <col:15, col:26> 'const double[3]' xvalue | | `-InitListExpr 0x7f82c23cd818 <col:15, col:26> 'const double[3]' | | |-FloatingLiteral 0x7f82c23cd760 <col:16> 'double' 9.000000e+00 | | |-FloatingLiteral 0x7f82c23cd780 <col:20> 'double' 7.000000e+00 | | `-FloatingLiteral 0x7f82c23cd7a0 <col:24> 'double' 8.000000e+00 | |-DeclStmt 0x7f82c23cdc40 <line:6:1, col:22> | | `-VarDecl 0x7f82c23cd968 <col:1, col:21> col:6 used v6 'auto' cinit | | `-CallExpr 0x7f82c23cdc10 <col:11, col:21> '<dependent type>' | | |-DeclRefExpr 0x7f82c23cdb90 <col:11> '<dependent type>' lvalue Var 0x7f82c23cdab8 'Take' '<dependent type>' | | |-DeclRefExpr 0x7f82c23cdbd0 <col:16> 'ROOT::RVecD':'ROOT::VecOps::RVec<double>' lvalue Var 0x7f82c23cd6f8 'v5' 'ROOT::RVecD':'ROOT::VecOps::RVec<double>' | | `-DeclRefExpr 0x7f82c23cdbf0 <col:20> 'auto' lvalue Var 0x7f82c23c6098 'i' 'auto' | |-CXXOperatorCallExpr 0x7f82c23d63d0 <line:7:1, line:8:52> '<dependent type>' '<<' | | |-UnresolvedLookupExpr 0x7f82c23d6090 <col:44> '<overloaded function type>' lvalue (ADL) = 'operator<<' 0x400be58 0x3fbc898 0x3fbc1f8 0x4009418 0x40096a0 0x4009930 0x4009bc0 0x4009e50 0x400a0e0 0x400a370 0x400a600 0x400a890 0x400ab20 0x400adb0 0x400b040 0x400b2d0 0x400b560 0x400b828 0x54f9608 0x54fbc78 0x5502f18 0x5503e08 0x5511288 0x55115a8 0x5523a38 0x5524b38 0x5525e78 0x5527248 0x5528588 0x55298c8 0x552b970 0x5784e98 0x5786878 0x5969688 0x44ed850 0x450e338 0x493ed88 0x49e8c30 0x4a378a8 0x4a37f48 0x4a385e8 0x4a38c78 0x4a39280 0x4a39890 0x4a40b00 0x4a3a610 0x4a3ac20 0x4a3b260 0x4a3f6e8 0x4a89590 0x4741e10 0x4bb19b8 0x4c55718 0x4cac3a8 0x4cad448 0x4cae4c8 0x4cafa38 0x4cb0b48 0x4cb1bc8 0x4cb3ae0 0x4cb4bc0 0x4da8728 0x4de1b28 0x4db4db8 0x4db5d18 0x4db6c78 0x4db7be8 0x4e04d68 0x4db82d8 0x4e1ac88 0x4db9238 0x4dba198 0x4dbb0f8 0x4dc2368 0x4deb7a8 0x4deddd0 0x4df04a8 0x4dfb268 0x4dfdf38 0x4e01728 0x4e0e988 0x4e114e0 0x4e15808 0x4e181c8 0x4e27db8 0x4e2cb28 0x4e317c8 0x5283460 0x4fb3518 0x4fb41b0 0x4fb4c18 0x4fb5678 0x4fb6168 0x5057c20 0x5058680 0x5059080 | | |-CXXOperatorCallExpr 0x7f82c23d5ff0 <line:7:1, line:8:41> '<dependent type>' '<<' | | | |-UnresolvedLookupExpr 0x7f82c23d5cb0 <col:38> '<overloaded function type>' lvalue (ADL) = 'operator<<' 0x400be58 0x3fbc898 0x3fbc1f8 0x4009418 0x40096a0 0x4009930 0x4009bc0 0x4009e50 0x400a0e0 0x400a370 0x400a600 0x400a890 0x400ab20 0x400adb0 0x400b040 0x400b2d0 0x400b560 0x400b828 0x54f9608 0x54fbc78 0x5502f18 0x5503e08 0x5511288 0x55115a8 0x5523a38 0x5524b38 0x5525e78 0x5527248 0x5528588 0x55298c8 0x552b970 0x5784e98 0x5786878 0x5969688 0x44ed850 0x450e338 0x493ed88 0x49e8c30 0x4a378a8 0x4a37f48 0x4a385e8 0x4a38c78 0x4a39280 0x4a39890 0x4a40b00 0x4a3a610 0x4a3ac20 0x4a3b260 0x4a3f6e8 0x4a89590 0x4741e10 0x4bb19b8 0x4c55718 0x4cac3a8 0x4cad448 0x4cae4c8 0x4cafa38 0x4cb0b48 0x4cb1bc8 0x4cb3ae0 0x4cb4bc0 0x4da8728 0x4de1b28 0x4db4db8 0x4db5d18 0x4db6c78 0x4db7be8 0x4e04d68 0x4db82d8 0x4e1ac88 0x4db9238 0x4dba198 0x4dbb0f8 0x4dc2368 0x4deb7a8 0x4deddd0 0x4df04a8 0x4dfb268 0x4dfdf38 0x4e01728 0x4e0e988 0x4e114e0 0x4e15808 0x4e181c8 0x4e27db8 0x4e2cb28 0x4e317c8 0x5283460 0x4fb3518 0x4fb41b0 0x4fb4c18 0x4fb5678 0x4fb6168 0x5057c20 0x5058680 0x5059080 | | | |-CXXOperatorCallExpr 0x7f82c23d5c38 <line:7:1, line:8:14> 'basic_ostream<char, char_traits<char> >':'std::basic_ostream<char>' lvalue '<<' | | | | |-ImplicitCastExpr 0x7f82c23d5c20 <col:11> 'basic_ostream<char, char_traits<char> > &(*)(basic_ostream<char, char_traits<char> > &, const char *)' <FunctionToPointerDecay> | | | | | `-DeclRefExpr 0x7f82c23d5c00 <col:11> 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' lvalue Function 0x7f82c0058b48 'operator<<' 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' | | | | |-CXXOperatorCallExpr 0x7f82c23d3738 <line:7:1, col:38> 'basic_ostream<char, char_traits<char> >':'std::basic_ostream<char>' lvalue '<<' | | | | | |-ImplicitCastExpr 0x7f82c23d3720 <col:35> 'basic_ostream<char, char_traits<char> > &(*)(basic_ostream<char, char_traits<char> > &, const char *)' <FunctionToPointerDecay> | | | | | | `-DeclRefExpr 0x7f82c23d3700 <col:35> 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' lvalue Function 0x7f82c0058b48 'operator<<' 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' | | | | | |-CXXOperatorCallExpr 0x7f82c23d1ec8 <col:1, col:32> 'std::ostream':'std::basic_ostream<char>' lvalue '<<' adl | | | | | | |-ImplicitCastExpr 0x7f82c23d1eb0 <col:29> 'std::ostream &(*)(std::ostream &, const RVec<double> &)' <FunctionToPointerDecay> | | | | | | | `-DeclRefExpr 0x7f82c23d1e90 <col:29> 'std::ostream &(std::ostream &, const RVec<double> &)' lvalue Function 0x7f82c0063f28 'operator<<' 'std::ostream &(std::ostream &, const RVec<double> &)' | | | | | | |-CXXOperatorCallExpr 0x7f82c23cf4e8 <col:1, col:14> 'basic_ostream<char, char_traits<char> >':'std::basic_ostream<char>' lvalue '<<' | | | | | | | |-ImplicitCastExpr 0x7f82c23cf4d0 <col:11> 'basic_ostream<char, char_traits<char> > &(*)(basic_ostream<char, char_traits<char> > &, const char *)' <FunctionToPointerDecay> | | | | | | | | `-DeclRefExpr 0x7f82c23cf4b0 <col:11> 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' lvalue Function 0x7f82c0058b48 'operator<<' 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' | | | | | | | |-DeclRefExpr 0x7f82c23cdca8 <col:1, col:6> 'ostream':'std::basic_ostream<char>' lvalue Var 0x4ccd128 'cout' 'ostream':'std::basic_ostream<char>' | | | | | | | `-ImplicitCastExpr 0x7f82c23cf498 <col:14> 'const char *' <ArrayToPointerDecay> | | | | | | | `-StringLiteral 0x7f82c23cdcd8 <col:14> 'const char[13]' lvalue "Sort vector " | | | | | | `-ImplicitCastExpr 0x7f82c23d1e78 <col:32> 'const RVec<double>':'const ROOT::VecOps::RVec<double>' lvalue <NoOp> | | | | | | `-DeclRefExpr 0x7f82c23cf520 <col:32> 'ROOT::RVecD':'ROOT::VecOps::RVec<double>' lvalue Var 0x7f82c23cd6f8 'v5' 'ROOT::RVecD':'ROOT::VecOps::RVec<double>' | | | | | `-ImplicitCastExpr 0x7f82c23d36e8 <col:38> 'const char *' <ArrayToPointerDecay> | | | | | `-StringLiteral 0x7f82c23d1f00 <col:38> 'const char[30]' lvalue " respective to the previously" | | | | `-ImplicitCastExpr 0x7f82c23d5be8 <line:8:14> 'const char *' <ArrayToPointerDecay> | | | | `-StringLiteral 0x7f82c23d3770 <col:14> 'const char[22]' lvalue " determined indices: " | | | `-DeclRefExpr 0x7f82c23d5c70 <col:41> 'auto' lvalue Var 0x7f82c23cd968 'v6' 'auto' | | `-UnresolvedLookupExpr 0x7f82c23d6048 <col:47, col:52> '<overloaded function type>' lvalue (no ADL) = 'endl' 0x4a3b8a0 | `-NullStmt 0x7f82c23d6408 <line:9:1> |-AnnotateAttr 0x7f82c23c6170 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7f82c23c6280 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7f82c23cda40 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" `-AnnotateAttr 0x7f82c23cdb20 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" <<<NULL>>>
Take can also be used to get the first or last elements of an RVec.
auto v7 = Take(v1, 2);
auto v8 = Take(v1, -2);
std::cout << "Take the two first and last elements of vector " << v1
<< ": " << v7 << ", " << v8 << std::endl;
input_line_55:2:2: error: Syntax error auto v7 = Take(v1, 2); ^ FunctionDecl 0x7f82c23d6558 <input_line_55:1:1, line:7:1> line:1:6 __cling_Un1Qu323 'void (void *)' |-ParmVarDecl 0x7f82c23d64a0 <col:23, col:29> col:29 vpClingValue 'void *' |-CompoundStmt 0x7f82c23de930 <col:43, line:7:1> | |-DeclStmt 0x7f82c23d6970 <line:2:2, col:23> | | `-VarDecl 0x7f82c23d6670 <col:2, col:22> col:7 used v7 'auto' cinit | | `-CallExpr 0x7f82c23d6940 <col:12, col:22> '<dependent type>' | | |-DeclRefExpr 0x7f82c23d68c0 <col:12> '<dependent type>' lvalue Var 0x7f82c23d67e8 'Take' '<dependent type>' | | |-DeclRefExpr 0x7f82c23d6900 <col:17> 'ROOT::RVecD':'ROOT::VecOps::RVec<double>' lvalue Var 0x8027650 'v1' 'ROOT::RVecD':'ROOT::VecOps::RVec<double>' | | `-IntegerLiteral 0x7f82c23d6920 <col:21> 'int' 2 | |-DeclStmt 0x7f82c23d6cb8 <line:3:1, col:23> | | `-VarDecl 0x7f82c23d69d0 <col:1, col:22> col:6 used v8 'auto' cinit | | `-CallExpr 0x7f82c23d6c88 <col:11, col:22> '<dependent type>' | | |-DeclRefExpr 0x7f82c23d6bf0 <col:11> '<dependent type>' lvalue Var 0x7f82c23d6b18 'Take' '<dependent type>' | | |-DeclRefExpr 0x7f82c23d6c30 <col:16> 'ROOT::RVecD':'ROOT::VecOps::RVec<double>' lvalue Var 0x8027650 'v1' 'ROOT::RVecD':'ROOT::VecOps::RVec<double>' | | `-UnaryOperator 0x7f82c23d6c70 <col:20, col:21> 'int' prefix '-' | | `-IntegerLiteral 0x7f82c23d6c50 <col:21> 'int' 2 | |-CXXOperatorCallExpr 0x7f82c23de8f0 <line:4:1, line:5:47> '<dependent type>' '<<' | | |-UnresolvedLookupExpr 0x7f82c23de5b0 <col:39> '<overloaded function type>' lvalue (ADL) = 'operator<<' 0x400be58 0x3fbc898 0x3fbc1f8 0x4009418 0x40096a0 0x4009930 0x4009bc0 0x4009e50 0x400a0e0 0x400a370 0x400a600 0x400a890 0x400ab20 0x400adb0 0x400b040 0x400b2d0 0x400b560 0x400b828 0x54f9608 0x54fbc78 0x5502f18 0x5503e08 0x5511288 0x55115a8 0x5523a38 0x5524b38 0x5525e78 0x5527248 0x5528588 0x55298c8 0x552b970 0x5784e98 0x5786878 0x5969688 0x44ed850 0x450e338 0x493ed88 0x49e8c30 0x4a378a8 0x4a37f48 0x4a385e8 0x4a38c78 0x4a39280 0x4a39890 0x4a40b00 0x4a3a610 0x4a3ac20 0x4a3b260 0x4a3f6e8 0x4a89590 0x4741e10 0x4bb19b8 0x4c55718 0x4cac3a8 0x4cad448 0x4cae4c8 0x4cafa38 0x4cb0b48 0x4cb1bc8 0x4cb3ae0 0x4cb4bc0 0x4da8728 0x4de1b28 0x4db4db8 0x4db5d18 0x4db6c78 0x4db7be8 0x4e04d68 0x4db82d8 0x4e1ac88 0x4db9238 0x4dba198 0x4dbb0f8 0x4dc2368 0x4deb7a8 0x4deddd0 0x4df04a8 0x4dfb268 0x4dfdf38 0x4e01728 0x4e0e988 0x4e114e0 0x4e15808 0x4e181c8 0x4e27db8 0x4e2cb28 0x4e317c8 0x5283460 0x4fb3518 0x4fb41b0 0x4fb4c18 0x4fb5678 0x4fb6168 0x5057c20 0x5058680 0x5059080 | | |-CXXOperatorCallExpr 0x7f82c23de510 <line:4:1, line:5:36> '<dependent type>' '<<' | | | |-UnresolvedLookupExpr 0x7f82c23de1d0 <col:33> '<overloaded function type>' lvalue (ADL) = 'operator<<' 0x400be58 0x3fbc898 0x3fbc1f8 0x4009418 0x40096a0 0x4009930 0x4009bc0 0x4009e50 0x400a0e0 0x400a370 0x400a600 0x400a890 0x400ab20 0x400adb0 0x400b040 0x400b2d0 0x400b560 0x400b828 0x54f9608 0x54fbc78 0x5502f18 0x5503e08 0x5511288 0x55115a8 0x5523a38 0x5524b38 0x5525e78 0x5527248 0x5528588 0x55298c8 0x552b970 0x5784e98 0x5786878 0x5969688 0x44ed850 0x450e338 0x493ed88 0x49e8c30 0x4a378a8 0x4a37f48 0x4a385e8 0x4a38c78 0x4a39280 0x4a39890 0x4a40b00 0x4a3a610 0x4a3ac20 0x4a3b260 0x4a3f6e8 0x4a89590 0x4741e10 0x4bb19b8 0x4c55718 0x4cac3a8 0x4cad448 0x4cae4c8 0x4cafa38 0x4cb0b48 0x4cb1bc8 0x4cb3ae0 0x4cb4bc0 0x4da8728 0x4de1b28 0x4db4db8 0x4db5d18 0x4db6c78 0x4db7be8 0x4e04d68 0x4db82d8 0x4e1ac88 0x4db9238 0x4dba198 0x4dbb0f8 0x4dc2368 0x4deb7a8 0x4deddd0 0x4df04a8 0x4dfb268 0x4dfdf38 0x4e01728 0x4e0e988 0x4e114e0 0x4e15808 0x4e181c8 0x4e27db8 0x4e2cb28 0x4e317c8 0x5283460 0x4fb3518 0x4fb41b0 0x4fb4c18 0x4fb5678 0x4fb6168 0x5057c20 0x5058680 0x5059080 | | | |-CXXOperatorCallExpr 0x7f82c23de158 <line:4:1, line:5:28> '<dependent type>' '<<' | | | | |-UnresolvedLookupExpr 0x7f82c23dde18 <col:25> '<overloaded function type>' lvalue (ADL) = 'operator<<' 0x400be58 0x3fbc898 0x3fbc1f8 0x4009418 0x40096a0 0x4009930 0x4009bc0 0x4009e50 0x400a0e0 0x400a370 0x400a600 0x400a890 0x400ab20 0x400adb0 0x400b040 0x400b2d0 0x400b560 0x400b828 0x54f9608 0x54fbc78 0x5502f18 0x5503e08 0x5511288 0x55115a8 0x5523a38 0x5524b38 0x5525e78 0x5527248 0x5528588 0x55298c8 0x552b970 0x5784e98 0x5786878 0x5969688 0x44ed850 0x450e338 0x493ed88 0x49e8c30 0x4a378a8 0x4a37f48 0x4a385e8 0x4a38c78 0x4a39280 0x4a39890 0x4a40b00 0x4a3a610 0x4a3ac20 0x4a3b260 0x4a3f6e8 0x4a89590 0x4741e10 0x4bb19b8 0x4c55718 0x4cac3a8 0x4cad448 0x4cae4c8 0x4cafa38 0x4cb0b48 0x4cb1bc8 0x4cb3ae0 0x4cb4bc0 0x4da8728 0x4de1b28 0x4db4db8 0x4db5d18 0x4db6c78 0x4db7be8 0x4e04d68 0x4db82d8 0x4e1ac88 0x4db9238 0x4dba198 0x4dbb0f8 0x4dc2368 0x4deb7a8 0x4deddd0 0x4df04a8 0x4dfb268 0x4dfdf38 0x4e01728 0x4e0e988 0x4e114e0 0x4e15808 0x4e181c8 0x4e27db8 0x4e2cb28 0x4e317c8 0x5283460 0x4fb3518 0x4fb41b0 0x4fb4c18 0x4fb5678 0x4fb6168 0x5057c20 0x5058680 0x5059080 | | | | |-CXXOperatorCallExpr 0x7f82c23dddc0 <line:4:1, line:5:22> '<dependent type>' '<<' | | | | | |-UnresolvedLookupExpr 0x7f82c23dda80 <col:19> '<overloaded function type>' lvalue (ADL) = 'operator<<' 0x400be58 0x3fbc898 0x3fbc1f8 0x4009418 0x40096a0 0x4009930 0x4009bc0 0x4009e50 0x400a0e0 0x400a370 0x400a600 0x400a890 0x400ab20 0x400adb0 0x400b040 0x400b2d0 0x400b560 0x400b828 0x54f9608 0x54fbc78 0x5502f18 0x5503e08 0x5511288 0x55115a8 0x5523a38 0x5524b38 0x5525e78 0x5527248 0x5528588 0x55298c8 0x552b970 0x5784e98 0x5786878 0x5969688 0x44ed850 0x450e338 0x493ed88 0x49e8c30 0x4a378a8 0x4a37f48 0x4a385e8 0x4a38c78 0x4a39280 0x4a39890 0x4a40b00 0x4a3a610 0x4a3ac20 0x4a3b260 0x4a3f6e8 0x4a89590 0x4741e10 0x4bb19b8 0x4c55718 0x4cac3a8 0x4cad448 0x4cae4c8 0x4cafa38 0x4cb0b48 0x4cb1bc8 0x4cb3ae0 0x4cb4bc0 0x4da8728 0x4de1b28 0x4db4db8 0x4db5d18 0x4db6c78 0x4db7be8 0x4e04d68 0x4db82d8 0x4e1ac88 0x4db9238 0x4dba198 0x4dbb0f8 0x4dc2368 0x4deb7a8 0x4deddd0 0x4df04a8 0x4dfb268 0x4dfdf38 0x4e01728 0x4e0e988 0x4e114e0 0x4e15808 0x4e181c8 0x4e27db8 0x4e2cb28 0x4e317c8 0x5283460 0x4fb3518 0x4fb41b0 0x4fb4c18 0x4fb5678 0x4fb6168 0x5057c20 0x5058680 0x5059080 | | | | | |-CXXOperatorCallExpr 0x7f82c23dda08 <line:4:1, line:5:14> 'basic_ostream<char, char_traits<char> >':'std::basic_ostream<char>' lvalue '<<' | | | | | | |-ImplicitCastExpr 0x7f82c23dd9f0 <col:11> 'basic_ostream<char, char_traits<char> > &(*)(basic_ostream<char, char_traits<char> > &, const char *)' <FunctionToPointerDecay> | | | | | | | `-DeclRefExpr 0x7f82c23dd9d0 <col:11> 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' lvalue Function 0x7f82c0058b48 'operator<<' 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' | | | | | | |-CXXOperatorCallExpr 0x7f82c23dc1b8 <line:4:1, col:67> 'std::ostream':'std::basic_ostream<char>' lvalue '<<' adl | | | | | | | |-ImplicitCastExpr 0x7f82c23dc1a0 <col:64> 'std::ostream &(*)(std::ostream &, const RVec<double> &)' <FunctionToPointerDecay> | | | | | | | | `-DeclRefExpr 0x7f82c23dc180 <col:64> 'std::ostream &(std::ostream &, const RVec<double> &)' lvalue Function 0x7f82c0063f28 'operator<<' 'std::ostream &(std::ostream &, const RVec<double> &)' | | | | | | | |-CXXOperatorCallExpr 0x7f82c23d97d8 <col:1, col:14> 'basic_ostream<char, char_traits<char> >':'std::basic_ostream<char>' lvalue '<<' | | | | | | | | |-ImplicitCastExpr 0x7f82c23d97c0 <col:11> 'basic_ostream<char, char_traits<char> > &(*)(basic_ostream<char, char_traits<char> > &, const char *)' <FunctionToPointerDecay> | | | | | | | | | `-DeclRefExpr 0x7f82c23d97a0 <col:11> 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' lvalue Function 0x7f82c0058b48 'operator<<' 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' | | | | | | | | |-DeclRefExpr 0x7f82c23d6d20 <col:1, col:6> 'ostream':'std::basic_ostream<char>' lvalue Var 0x4ccd128 'cout' 'ostream':'std::basic_ostream<char>' | | | | | | | | `-ImplicitCastExpr 0x7f82c23d9788 <col:14> 'const char *' <ArrayToPointerDecay> | | | | | | | | `-StringLiteral 0x7f82c23d6dc8 <col:14> 'const char[48]' lvalue "Take the two first and last elements of vector " | | | | | | | `-ImplicitCastExpr 0x7f82c23dc168 <col:67> 'const RVec<double>':'const ROOT::VecOps::RVec<double>' lvalue <NoOp> | | | | | | | `-DeclRefExpr 0x7f82c23d9810 <col:67> 'ROOT::RVecD':'ROOT::VecOps::RVec<double>' lvalue Var 0x8027650 'v1' 'ROOT::RVecD':'ROOT::VecOps::RVec<double>' | | | | | | `-ImplicitCastExpr 0x7f82c23dd9b8 <line:5:14> 'const char *' <ArrayToPointerDecay> | | | | | | `-StringLiteral 0x7f82c23dc1f0 <col:14> 'const char[3]' lvalue ": " | | | | | `-DeclRefExpr 0x7f82c23dda40 <col:22> 'auto' lvalue Var 0x7f82c23d6670 'v7' 'auto' | | | | `-StringLiteral 0x7f82c23dddf8 <col:28> 'const char[3]' lvalue ", " | | | `-DeclRefExpr 0x7f82c23de190 <col:36> 'auto' lvalue Var 0x7f82c23d69d0 'v8' 'auto' | | `-UnresolvedLookupExpr 0x7f82c23de568 <col:42, col:47> '<overloaded function type>' lvalue (no ADL) = 'endl' 0x4a3b8a0 | `-NullStmt 0x7f82c23de928 <line:6:1> |-AnnotateAttr 0x7f82c23d6748 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7f82c23d6850 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7f82c23d6aa8 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" `-AnnotateAttr 0x7f82c23d6b80 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" <<<NULL>>>
Because the helpers return a copy of the input, you can chain the operations conveniently.
auto v9 = Reverse(Take(Sort(v1), -2));
std::cout << "Sort the vector " << v1 << ", take the two last elements and "
<< "reverse the selection: " << v9 << std::endl;
input_line_56:2:2: error: Syntax error auto v9 = Reverse(Take(Sort(v1), -2)); ^ FunctionDecl 0x7f82c23dea68 <input_line_56:1:1, line:6:1> line:1:6 __cling_Un1Qu324 'void (void *)' |-ParmVarDecl 0x7f82c23de9b0 <col:23, col:29> col:29 vpClingValue 'void *' |-CompoundStmt 0x7f82c23e9ba0 <col:43, line:6:1> | |-DeclStmt 0x7f82c23df2e8 <line:2:2, col:39> | | `-VarDecl 0x7f82c23deb80 <col:2, col:38> col:7 used v9 'auto' cinit | | `-CallExpr 0x7f82c23df2c0 <col:12, col:38> '<dependent type>' | | |-DeclRefExpr 0x7f82c23dedd0 <col:12> '<dependent type>' lvalue Var 0x7f82c23decf8 'Reverse' '<dependent type>' | | `-CallExpr 0x7f82c23df290 <col:20, col:37> '<dependent type>' | | |-DeclRefExpr 0x7f82c23defd0 <col:20> '<dependent type>' lvalue Var 0x7f82c23deef8 'Take' '<dependent type>' | | |-CallExpr 0x7f82c23df230 <col:25, col:32> '<dependent type>' | | | |-DeclRefExpr 0x7f82c23df1d0 <col:25> '<dependent type>' lvalue Var 0x7f82c23df0f8 'Sort' '<dependent type>' | | | `-DeclRefExpr 0x7f82c23df210 <col:30> 'ROOT::RVecD':'ROOT::VecOps::RVec<double>' lvalue Var 0x8027650 'v1' 'ROOT::RVecD':'ROOT::VecOps::RVec<double>' | | `-UnaryOperator 0x7f82c23df278 <col:35, col:36> 'int' prefix '-' | | `-IntegerLiteral 0x7f82c23df258 <col:36> 'int' 2 | |-CXXOperatorCallExpr 0x7f82c23e9b60 <line:3:1, line:4:54> '<dependent type>' '<<' | | |-UnresolvedLookupExpr 0x7f82c23e9820 <col:46> '<overloaded function type>' lvalue (ADL) = 'operator<<' 0x400be58 0x3fbc898 0x3fbc1f8 0x4009418 0x40096a0 0x4009930 0x4009bc0 0x4009e50 0x400a0e0 0x400a370 0x400a600 0x400a890 0x400ab20 0x400adb0 0x400b040 0x400b2d0 0x400b560 0x400b828 0x54f9608 0x54fbc78 0x5502f18 0x5503e08 0x5511288 0x55115a8 0x5523a38 0x5524b38 0x5525e78 0x5527248 0x5528588 0x55298c8 0x552b970 0x5784e98 0x5786878 0x5969688 0x44ed850 0x450e338 0x493ed88 0x49e8c30 0x4a378a8 0x4a37f48 0x4a385e8 0x4a38c78 0x4a39280 0x4a39890 0x4a40b00 0x4a3a610 0x4a3ac20 0x4a3b260 0x4a3f6e8 0x4a89590 0x4741e10 0x4bb19b8 0x4c55718 0x4cac3a8 0x4cad448 0x4cae4c8 0x4cafa38 0x4cb0b48 0x4cb1bc8 0x4cb3ae0 0x4cb4bc0 0x4da8728 0x4de1b28 0x4db4db8 0x4db5d18 0x4db6c78 0x4db7be8 0x4e04d68 0x4db82d8 0x4e1ac88 0x4db9238 0x4dba198 0x4dbb0f8 0x4dc2368 0x4deb7a8 0x4deddd0 0x4df04a8 0x4dfb268 0x4dfdf38 0x4e01728 0x4e0e988 0x4e114e0 0x4e15808 0x4e181c8 0x4e27db8 0x4e2cb28 0x4e317c8 0x5283460 0x4fb3518 0x4fb41b0 0x4fb4c18 0x4fb5678 0x4fb6168 0x5057c20 0x5058680 0x5059080 | | |-CXXOperatorCallExpr 0x7f82c23e9780 <line:3:1, line:4:43> '<dependent type>' '<<' | | | |-UnresolvedLookupExpr 0x7f82c23e9440 <col:40> '<overloaded function type>' lvalue (ADL) = 'operator<<' 0x400be58 0x3fbc898 0x3fbc1f8 0x4009418 0x40096a0 0x4009930 0x4009bc0 0x4009e50 0x400a0e0 0x400a370 0x400a600 0x400a890 0x400ab20 0x400adb0 0x400b040 0x400b2d0 0x400b560 0x400b828 0x54f9608 0x54fbc78 0x5502f18 0x5503e08 0x5511288 0x55115a8 0x5523a38 0x5524b38 0x5525e78 0x5527248 0x5528588 0x55298c8 0x552b970 0x5784e98 0x5786878 0x5969688 0x44ed850 0x450e338 0x493ed88 0x49e8c30 0x4a378a8 0x4a37f48 0x4a385e8 0x4a38c78 0x4a39280 0x4a39890 0x4a40b00 0x4a3a610 0x4a3ac20 0x4a3b260 0x4a3f6e8 0x4a89590 0x4741e10 0x4bb19b8 0x4c55718 0x4cac3a8 0x4cad448 0x4cae4c8 0x4cafa38 0x4cb0b48 0x4cb1bc8 0x4cb3ae0 0x4cb4bc0 0x4da8728 0x4de1b28 0x4db4db8 0x4db5d18 0x4db6c78 0x4db7be8 0x4e04d68 0x4db82d8 0x4e1ac88 0x4db9238 0x4dba198 0x4dbb0f8 0x4dc2368 0x4deb7a8 0x4deddd0 0x4df04a8 0x4dfb268 0x4dfdf38 0x4e01728 0x4e0e988 0x4e114e0 0x4e15808 0x4e181c8 0x4e27db8 0x4e2cb28 0x4e317c8 0x5283460 0x4fb3518 0x4fb41b0 0x4fb4c18 0x4fb5678 0x4fb6168 0x5057c20 0x5058680 0x5059080 | | | |-CXXOperatorCallExpr 0x7f82c23e93c8 <line:3:1, line:4:14> 'basic_ostream<char, char_traits<char> >':'std::basic_ostream<char>' lvalue '<<' | | | | |-ImplicitCastExpr 0x7f82c23e93b0 <col:11> 'basic_ostream<char, char_traits<char> > &(*)(basic_ostream<char, char_traits<char> > &, const char *)' <FunctionToPointerDecay> | | | | | `-DeclRefExpr 0x7f82c23e9390 <col:11> 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' lvalue Function 0x7f82c0058b48 'operator<<' 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' | | | | |-CXXOperatorCallExpr 0x7f82c23e6768 <line:3:1, col:42> 'basic_ostream<char, char_traits<char> >':'std::basic_ostream<char>' lvalue '<<' | | | | | |-ImplicitCastExpr 0x7f82c23e6750 <col:39> 'basic_ostream<char, char_traits<char> > &(*)(basic_ostream<char, char_traits<char> > &, const char *)' <FunctionToPointerDecay> | | | | | | `-DeclRefExpr 0x7f82c23e6730 <col:39> 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' lvalue Function 0x7f82c0058b48 'operator<<' 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' | | | | | |-CXXOperatorCallExpr 0x7f82c23e41f8 <col:1, col:36> 'std::ostream':'std::basic_ostream<char>' lvalue '<<' adl | | | | | | |-ImplicitCastExpr 0x7f82c23e41e0 <col:33> 'std::ostream &(*)(std::ostream &, const RVec<double> &)' <FunctionToPointerDecay> | | | | | | | `-DeclRefExpr 0x7f82c23e41c0 <col:33> 'std::ostream &(std::ostream &, const RVec<double> &)' lvalue Function 0x7f82c0063f28 'operator<<' 'std::ostream &(std::ostream &, const RVec<double> &)' | | | | | | |-CXXOperatorCallExpr 0x7f82c23e1818 <col:1, col:14> 'basic_ostream<char, char_traits<char> >':'std::basic_ostream<char>' lvalue '<<' | | | | | | | |-ImplicitCastExpr 0x7f82c23e1800 <col:11> 'basic_ostream<char, char_traits<char> > &(*)(basic_ostream<char, char_traits<char> > &, const char *)' <FunctionToPointerDecay> | | | | | | | | `-DeclRefExpr 0x7f82c23e17e0 <col:11> 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' lvalue Function 0x7f82c0058b48 'operator<<' 'basic_ostream<char, char_traits<char> > &(basic_ostream<char, char_traits<char> > &, const char *)' | | | | | | | |-DeclRefExpr 0x7f82c23df350 <col:1, col:6> 'ostream':'std::basic_ostream<char>' lvalue Var 0x4ccd128 'cout' 'ostream':'std::basic_ostream<char>' | | | | | | | `-ImplicitCastExpr 0x7f82c23e17c8 <col:14> 'const char *' <ArrayToPointerDecay> | | | | | | | `-StringLiteral 0x7f82c23df380 <col:14> 'const char[17]' lvalue "Sort the vector " | | | | | | `-ImplicitCastExpr 0x7f82c23e41a8 <col:36> 'const RVec<double>':'const ROOT::VecOps::RVec<double>' lvalue <NoOp> | | | | | | `-DeclRefExpr 0x7f82c23e1850 <col:36> 'ROOT::RVecD':'ROOT::VecOps::RVec<double>' lvalue Var 0x8027650 'v1' 'ROOT::RVecD':'ROOT::VecOps::RVec<double>' | | | | | `-ImplicitCastExpr 0x7f82c23e6718 <col:42> 'const char *' <ArrayToPointerDecay> | | | | | `-StringLiteral 0x7f82c23e42a8 <col:42> 'const char[34]' lvalue ", take the two last elements and " | | | | `-ImplicitCastExpr 0x7f82c23e9378 <line:4:14> 'const char *' <ArrayToPointerDecay> | | | | `-StringLiteral 0x7f82c23e6818 <col:14> 'const char[24]' lvalue "reverse the selection: " | | | `-DeclRefExpr 0x7f82c23e9400 <col:43> 'auto' lvalue Var 0x7f82c23deb80 'v9' 'auto' | | `-UnresolvedLookupExpr 0x7f82c23e97d8 <col:49, col:54> '<overloaded function type>' lvalue (no ADL) = 'endl' 0x4a3b8a0 | `-NullStmt 0x7f82c23e9b98 <line:5:1> |-AnnotateAttr 0x7f82c23dec58 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7f82c23ded60 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7f82c23dee80 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7f82c23def60 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" |-AnnotateAttr 0x7f82c23df080 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" `-AnnotateAttr 0x7f82c23df160 <<invalid sloc>> Implicit R"ATTRDUMP(__ResolveAtRuntime)ATTRDUMP" <<<NULL>>>