# What is range() function, and how it can help you ?
# A sequence of numbers from starting point to end point ( End point may be undefined, so you have a Infinite range), and optional step parameter.
# You can generate a sequence integers ,
example:-
range(1, 10) # Exclusive ranges == [start, end, step)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
range(1, 10) # Inclusive ranges == [start, end, step]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# You are not limited to generate ranges of integers, you can also generate ranges from char / float ( * ) data type.
example:-
range('a', 'z', 1) # Exclusive ranges == [start, end, step)
a b c d e f g h i j k l m n o p q r s t u v w x y
range('A', 'z', 1 ) # Inclusive ranges = [start, end, step]
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z
# More Examples :- ( Exclusive ranges )
std::vector<char> v = rangeE('a', 'z', 1 );
a b c d e f g h i j k l m n o p q r s t u v w x y
std::vector<char> v = rangeE('A', 'z', 3);
A D G J M P S V Y \ _ b e h k n q t w
std::vector<int> v = rangeE(0, 100, 4);
0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96
std::vector<float> v = rangeE<float, float>(10.3, 345.3, 0.4);
10.3 10.7 11.1 ,... 343.497 343.897 344.297 344.697 345.097
std::vector<int> v = rangeE(10, 100);
10 11 12 13 ,... 97 98 99
std::vector<float> v = rangeE<float, float> (0, 100, 0.5);
0 0.5 1 1.5 2 ,... 97 97.5 98 98.5 99 99.5
std::vector<char> v = rangeE('A', 'z', 1 );
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y
# More Examples :- ( Inclusive ranges )
std::vector<char> v = rangeI('a', 'z', 1 );
a b c d e f g h i j k l m n o p q r s t u v w x y z
std::vector<char> v = rangeI('A', 'z', 3);
A D G J M P S V Y \ _ b e h k n q t w z
std::vector<int> v = rangeI(0, 100, 4);
0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100
std::vector<float> v = rangeI<float, float>(10.3, 345.3, 0.4);
10.3 10.7 11.1 ,... 345.097 345.497 345.897 346.297
std::vector<int> v = rangeI(10, 100);
10 11 12 13 ,.. 97 98 99 100
std::vector<float> v = rangeI<float, float> (0, 100, 0.5);
0 0.5 1 1.5 2 ,... 98 98.5 99 99.5 100 100.5
## range() function using C++
### Exclusive ranges
### Inclusive ranges
# Tests :-
## Does our range() function can be directly used in other programs?
## What about its performance?
## Does it comparable to native range() function in C++?
### Implementing and using native range() function in C++11
iteration = 10000000; Language = C++11
# Write output to Console
ssp@ssp-pc ~/Programming/CPP $ xterm ./ExclusiveRangeDef
10.5701301098
10.5873568058
10.4189360142
10.7807810307
10.10414505
# Don't print output to console/Terminal/Command Prompt, Just save that into a Text FILE.
iteration = 10000000; Language = C++11
ssp@ssp-pc ~/Programming/CPP $ xterm -e "./ExclusiveRangeDef > dumploop.txt"
0.556797981262
1.02536702156
1.04401111603
0.961767911911
0.982132911682
0.971391916275
0.934329032898
1.09931206703
0.961050033569
0.937591075897
iteration = 10000000*10; Language = C++11
# Don't print output to console/Terminal/Command Prompt, Just save that into a Text FILE.
ssp@ssp-pc ~/Programming/CPP/RangeInCPP $ xterm -e "./ExclusiveRangeDef > dumploop.txt"
6.75697207451
6.55503702164
8.64361310005
5.96445202827
7.79801106453
6.90669894218
6.0758459568
6.74977111816
7.17069101334
7.01367592812
### Implementing and using range() Function with another function in C++11
iteration = 10000000; Language = C++11
ssp@ssp-pc ~/Programming/CPP $ xterm ./ExclusiveRange
10.5833230019
10.6844108105
10.6519501209
10.6691529751
10.6650300026
# Don't print output to console/Terminal/Command Prompt, Just save them into a Text FILE.
iteration = 10000000; Language = C++11
ssp@ssp-pc ~/Programming/CPP $ xterm -e "./ExclusiveRange > dumploop.txt"
0.753065824509
1.19918298721
1.18582081795
1.1427628994
1.60647511482
1.0098259449
1.18290019035
1.12054014206
1.10526990891
1.14365291595
iteration = 10000000; Language = C++11; Implementation = using C++ Template
ssp@ssp-pc ~/Programming/CPP/RangeInCPP $ xterm -e "./ExclusiveRangeTemp > dumploop.txt"
1.16944003105
0.979794979095
1.31697702408
0.782207012177
1.13583612442
1.56683707237
1.01916909218
1.18384790421
0.986218214035
1.383425951
# Don't print output to console/Terminal/Command Prompt, Just save that into a Text FILE.
iteration = 10000000*10; Language = C++11
ssp@ssp-pc ~/Programming/CPP/RangeInCPP $ xterm -e "./ExclusiveRange > dumploop.txt"
8.63241100311
8.56675696373
6.39435505867
8.33173489571
8.47799301147
8.60728192329
8.34282588959
7.66121196747
7.68087077141
8.34091496468
# Testing our built function within nested loop
# iteration = 1000x1000; Language = C++11
# Code :-
for(auto i: rangeE(0, 100, 2)) {
for(auto j: rangeE(0, 100, 2)) {
cout << i << ' ' << j << endl;
}
}
ssp@ssp-pc ~/Programming/CPP/RangeInCPP $ xterm -e "./ExclusiveRangeTempNest0 > dumploop.txt"
1.52887296677
1.60038113594
1.56652903557
1.78646588326
1.50389409065
1.59423518181
1.56246495247
1.57362604141
1.58079385757
1.56350493431
# iteration = 1000x1000; Language = C++11
# Code :-
for(int i=0; i< 1000; i+=2) {
for(int j=0; j< 1000; j+=2) {
cout << i << ' ' << j << endl;
}
}
cout << endl;
ssp@ssp-pc ~/Programming/CPP/RangeInCPP $ xterm -e "./ExclusiveRangeDefNest0 > dumploop.txt"
1.5027050972
1.65471196175
1.49789905548
1.7509188652
1.52278089523
1.58404016495
1.52930808067
1.54360198975
1.54617094994
1.54985117912
# Built-in Python range() function tests :-
iteration = 10000000; Language = Python2.7
ssp@ssp-pc ~/Programming/CPP $ xterm ./ExclusiveListPY.py
11.4798099995
11.4038779736
11.5232269764
11.460515976
11.6050000191
# Don't print output to console/Terminal/Command Prompt, Just save them into a Text FILE.
iteration = 10000000; Language = Python2.7
ssp@ssp-pc ~/Programming/CPP $ xterm -e "./ExclusiveListPY.py > dumploop.txt"
2.33868694305
2.60927009583
2.50296115875
2.53171110153
2.93597483635
2.12743091583
2.47753596306
2.4461350441
2.69060111046
2.41603589058
# NOTE :- testing of programs is done with Python Script, that will tell you execution time taken by a program.
# PC conf :-
Intel CORE 2 DUO ( 2GB RAM )
LinuxMint 17 - x64
# A sequence of numbers from starting point to end point ( End point may be undefined, so you have a Infinite range), and optional step parameter.
# You can generate a sequence integers ,
example:-
range(1, 10) # Exclusive ranges == [start, end, step)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
range(1, 10) # Inclusive ranges == [start, end, step]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# You are not limited to generate ranges of integers, you can also generate ranges from char / float ( * ) data type.
example:-
range('a', 'z', 1) # Exclusive ranges == [start, end, step)
a b c d e f g h i j k l m n o p q r s t u v w x y
range('A', 'z', 1 ) # Inclusive ranges = [start, end, step]
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z
# More Examples :- ( Exclusive ranges )
std::vector<char> v = rangeE('a', 'z', 1 );
a b c d e f g h i j k l m n o p q r s t u v w x y
std::vector<char> v = rangeE('A', 'z', 3);
A D G J M P S V Y \ _ b e h k n q t w
std::vector<int> v = rangeE(0, 100, 4);
0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96
std::vector<float> v = rangeE<float, float>(10.3, 345.3, 0.4);
10.3 10.7 11.1 ,... 343.497 343.897 344.297 344.697 345.097
std::vector<int> v = rangeE(10, 100);
10 11 12 13 ,... 97 98 99
std::vector<float> v = rangeE<float, float> (0, 100, 0.5);
0 0.5 1 1.5 2 ,... 97 97.5 98 98.5 99 99.5
std::vector<char> v = rangeE('A', 'z', 1 );
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y
# More Examples :- ( Inclusive ranges )
std::vector<char> v = rangeI('a', 'z', 1 );
a b c d e f g h i j k l m n o p q r s t u v w x y z
std::vector<char> v = rangeI('A', 'z', 3);
A D G J M P S V Y \ _ b e h k n q t w z
std::vector<int> v = rangeI(0, 100, 4);
0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100
std::vector<float> v = rangeI<float, float>(10.3, 345.3, 0.4);
10.3 10.7 11.1 ,... 345.097 345.497 345.897 346.297
std::vector<int> v = rangeI(10, 100);
10 11 12 13 ,.. 97 98 99 100
std::vector<float> v = rangeI<float, float> (0, 100, 0.5);
0 0.5 1 1.5 2 ,... 98 98.5 99 99.5 100 100.5
## range() function using C++
### Exclusive ranges
#include <iostream> #include <cstdlib> #include <string> #include <vector> using namespace std; template<class T=int, class U=int> std::vector<T> rangeE(T start, T stop, U step=1){ std::vector<T> v; while(1) { if (start >= stop) { break; } v.push_back(start); start += step; } return v; } int main(int argc, char const *argv[]) { // std::vector<char> v = rangeE('a', 'z', 1 ); // std::vector<char> v = rangeE('A', 'z', 3); // std::vector<int> v = rangeE(0, 100, 4); // std::vector<float> v = rangeE<float, float>(10.3, 345.3, 0.4); // std::vector<int> v = rangeE(10, 100); std::vector<float> v = rangeE<float, float> (0, 100, 0.5); for(auto i: v){ cout << i << ' '; } cout << '\n'; return 0; }
### Inclusive ranges
#include <iostream> #include <cstdlib> #include <string> #include <vector> using namespace std; template<class T=int, class U=int> std::vector<T> rangeI(T start, T stop, U step=1){ std::vector<T> v; while(1) { if (start >= stop+1) { break; } v.push_back(start); start += step; } return v; } int main(int argc, char const *argv[]) { // std::vector<char> v = rangeI('a', 'z', 1 ); // std::vector<char> v = rangeI('A', 'z', 3); // std::vector<int> v = rangeI(0, 100, 4); // std::vector<float> v = rangeI<float, float>(10.3, 345.3, 0.4); // std::vector<int> v = rangeI(10, 100); std::vector<float> v = rangeI<float, float> (0, 100, 0.5); for(auto i: v){ cout << i << ' '; } cout << '\n'; return 0; }
# Tests :-
## Does our range() function can be directly used in other programs?
## What about its performance?
## Does it comparable to native range() function in C++?
### Implementing and using native range() function in C++11
iteration = 10000000; Language = C++11
# Write output to Console
ssp@ssp-pc ~/Programming/CPP $ xterm ./ExclusiveRangeDef
10.5701301098
10.5873568058
10.4189360142
10.7807810307
10.10414505
# Don't print output to console/Terminal/Command Prompt, Just save that into a Text FILE.
iteration = 10000000; Language = C++11
ssp@ssp-pc ~/Programming/CPP $ xterm -e "./ExclusiveRangeDef > dumploop.txt"
0.556797981262
1.02536702156
1.04401111603
0.961767911911
0.982132911682
0.971391916275
0.934329032898
1.09931206703
0.961050033569
0.937591075897
iteration = 10000000*10; Language = C++11
# Don't print output to console/Terminal/Command Prompt, Just save that into a Text FILE.
ssp@ssp-pc ~/Programming/CPP/RangeInCPP $ xterm -e "./ExclusiveRangeDef > dumploop.txt"
6.75697207451
6.55503702164
8.64361310005
5.96445202827
7.79801106453
6.90669894218
6.0758459568
6.74977111816
7.17069101334
7.01367592812
### Implementing and using range() Function with another function in C++11
iteration = 10000000; Language = C++11
ssp@ssp-pc ~/Programming/CPP $ xterm ./ExclusiveRange
10.5833230019
10.6844108105
10.6519501209
10.6691529751
10.6650300026
# Don't print output to console/Terminal/Command Prompt, Just save them into a Text FILE.
iteration = 10000000; Language = C++11
ssp@ssp-pc ~/Programming/CPP $ xterm -e "./ExclusiveRange > dumploop.txt"
0.753065824509
1.19918298721
1.18582081795
1.1427628994
1.60647511482
1.0098259449
1.18290019035
1.12054014206
1.10526990891
1.14365291595
iteration = 10000000; Language = C++11; Implementation = using C++ Template
ssp@ssp-pc ~/Programming/CPP/RangeInCPP $ xterm -e "./ExclusiveRangeTemp > dumploop.txt"
1.16944003105
0.979794979095
1.31697702408
0.782207012177
1.13583612442
1.56683707237
1.01916909218
1.18384790421
0.986218214035
1.383425951
# Don't print output to console/Terminal/Command Prompt, Just save that into a Text FILE.
iteration = 10000000*10; Language = C++11
ssp@ssp-pc ~/Programming/CPP/RangeInCPP $ xterm -e "./ExclusiveRange > dumploop.txt"
8.63241100311
8.56675696373
6.39435505867
8.33173489571
8.47799301147
8.60728192329
8.34282588959
7.66121196747
7.68087077141
8.34091496468
# Testing our built function within nested loop
# iteration = 1000x1000; Language = C++11
# Code :-
for(auto i: rangeE(0, 100, 2)) {
for(auto j: rangeE(0, 100, 2)) {
cout << i << ' ' << j << endl;
}
}
ssp@ssp-pc ~/Programming/CPP/RangeInCPP $ xterm -e "./ExclusiveRangeTempNest0 > dumploop.txt"
1.52887296677
1.60038113594
1.56652903557
1.78646588326
1.50389409065
1.59423518181
1.56246495247
1.57362604141
1.58079385757
1.56350493431
# iteration = 1000x1000; Language = C++11
# Code :-
for(int i=0; i< 1000; i+=2) {
for(int j=0; j< 1000; j+=2) {
cout << i << ' ' << j << endl;
}
}
cout << endl;
ssp@ssp-pc ~/Programming/CPP/RangeInCPP $ xterm -e "./ExclusiveRangeDefNest0 > dumploop.txt"
1.5027050972
1.65471196175
1.49789905548
1.7509188652
1.52278089523
1.58404016495
1.52930808067
1.54360198975
1.54617094994
1.54985117912
# Built-in Python range() function tests :-
iteration = 10000000; Language = Python2.7
ssp@ssp-pc ~/Programming/CPP $ xterm ./ExclusiveListPY.py
11.4798099995
11.4038779736
11.5232269764
11.460515976
11.6050000191
# Don't print output to console/Terminal/Command Prompt, Just save them into a Text FILE.
iteration = 10000000; Language = Python2.7
ssp@ssp-pc ~/Programming/CPP $ xterm -e "./ExclusiveListPY.py > dumploop.txt"
2.33868694305
2.60927009583
2.50296115875
2.53171110153
2.93597483635
2.12743091583
2.47753596306
2.4461350441
2.69060111046
2.41603589058
# NOTE :- testing of programs is done with Python Script, that will tell you execution time taken by a program.
# PC conf :-
Intel CORE 2 DUO ( 2GB RAM )
LinuxMint 17 - x64
No comments :
Post a Comment