Arithmetik mit Positionen in C++
Hier darf die Position wieder »const« sein.
Nicht alle Positionen unterstützen diese Arithmetik, einige erlauben zwar »++«, aber nicht »+«.
»b + 2« bedeutet „die Position, die »b« nach zweimaligem »++b;« hätte (wenn es nicht »const« wäre)“.
»*( b + 2 )« bedeutet „der Wert an der Position »b + 2«“.
main.cpp
#include <initializer_list>
#include <iostream>
#include <iterator>
#include <ostream>
#include <string>using namespace ::std::literals;
int main()
{ ::std::string s = "abc"s;
auto const b = cbegin( s );
auto const t = cend( s );
::std::cout << *( b + 0 )<< '\n';
::std::cout << *( b + 1 )<< '\n';
::std::cout << *( b + 2 )<< '\n';
::std::cout << *( t - 1 )<< '\n';
::std::cout << *( t - 2 )<< '\n';
::std::cout << *( t - 3 )<< '\n'; }transcript
a
b
c
c
b
a
Nicht alle Positionen können als Operand des binären Summenoperators verwendet werden. Dies kann vom Typ der Folge abhängen, auf die sie sich beziehen.
main.cpp
#include <iostream>
#include <ostream>
#include <string>
#include <iterator>
#include <algorithm>
#include <initializer_list>
#include <random> // std::default_random_engine
#include <chrono> // std::chrono::system_clockint main()
{ ::std::string str{ "zyxwvutsrqponmlkjihgfedcba" };
::std::cout << str << "\n";
shuffle( begin( str ), begin( str )+ 12, ::std::default_random_engine
( ::std::chrono::system_clock::now().time_since_epoch().count() ));
::std::cout << str << "\n";
::std::sort( end( str )- 12, str.end() );
::std::cout << str << "\n"; }::std::cout
zyxwvutsrqponmlkjihgfedcba
pyqxzoswvtrunmlkjihgfedcba
pyqxzoswvtrunmabcdefghijkl