34 cout <<
"=== Array Utilities: Educational Examples ===\n\n";
42 cout <<
"--- Example 1: Reversing Arrays ---\n\n";
45 int arr[] = {1, 2, 3, 4, 5, 6, 7, 8};
48 cout <<
"Original array: ";
49 for (
size_t i = 0; i < n; ++i)
50 cout << arr[i] <<
" ";
58 cout <<
"After reverse: ";
59 for (
size_t i = 0; i < n; ++i)
60 cout << arr[i] <<
" ";
65 cout <<
"\nLESSON: Reversal uses only n/2 swaps - very efficient!\n\n";
74 cout <<
"--- Example 2: Array Rotation ---\n\n";
76 char letters[] = {
'A',
'B',
'C',
'D',
'E',
'F'};
80 for (
size_t i = 0; i < n; ++i)
89 cout <<
"Rotate left 2: ";
90 for (
size_t i = 0; i < n; ++i)
98 cout <<
"Rotate right 3: ";
99 for (
size_t i = 0; i < n; ++i)
105 cout <<
"\nKEY ALGORITHM: Rotation = 3 reversals (Bentley's algorithm)\n";
106 cout <<
" 1. Reverse first k elements\n";
107 cout <<
" 2. Reverse remaining n-k elements\n";
108 cout <<
" 3. Reverse entire array\n\n";
117 cout <<
"--- Example 3: Gap Operations (Insert/Delete Space) ---\n\n";
120 int buffer[10] = {10, 20, 30, 40, 50};
123 cout <<
"Initial buffer (5 elements): ";
124 for (
size_t i = 0; i <
used; ++i)
125 cout << buffer[i] <<
" ";
142 cout <<
"After inserting 25, 27: ";
143 for (
size_t i = 0; i <
used; ++i)
144 cout << buffer[i] <<
" ";
149 cout <<
"\nClosing gap: removing 2 elements at position 3...\n";
153 cout <<
"After removal: ";
154 for (
size_t i = 0; i <
used; ++i)
155 cout << buffer[i] <<
" ";
159 cout <<
"\nREAL-WORLD: Text editors use gap buffers for efficient editing\n";
160 cout <<
" - Gap moves with cursor\n";
161 cout <<
" - Insert/delete at gap position is O(1)\n";
162 cout <<
" - Moving gap is O(distance)\n\n";
170 cout <<
"--- Example 4: Integration with DynArray ---\n\n";
174 cout <<
"DynArray: ";
179 size_t n = arr.
size();
182 cout <<
"Reversed (manual): ";
183 for (
int i = n - 1; i >= 0; --i)
184 cout << arr[i] <<
" ";
188 cout <<
"=== SUMMARY: Key Concepts ===\n";
189 cout <<
"\n1. EFFICIENCY:\n";
190 cout <<
" All operations are O(n) time, O(1) space\n";
191 cout <<
" In-place algorithms minimize memory usage\n";
192 cout <<
"\n2. ROTATION ALGORITHM (Bentley):\n";
193 cout <<
" Three reversals achieve rotation\n";
194 cout <<
" More efficient than naive circular shifting\n";
195 cout <<
"\n3. GAP BUFFERS:\n";
196 cout <<
" Core technique for text editors\n";
197 cout <<
" Efficient insertion/deletion at cursor\n";
198 cout <<
"\n4. WHEN TO USE:\n";
199 cout <<
" - Implementing custom containers\n";
200 cout <<
" - Performance-critical array manipulation\n";
201 cout <<
" - Building higher-level data structures\n";
202 cout <<
"\n5. COMPLEXITY SUMMARY:\n";
203 cout <<
" reverse(): O(n) time, O(1) space\n";
204 cout <<
" rotate(): O(n) time, O(1) space\n";
205 cout <<
" open_gap(): O(n) time, O(1) space\n";
206 cout <<
" close_gap(): O(n) time, O(1) space\n";
Utility functions for array manipulation.
size_t size() const noexcept
Return the current dimension of array.
void for_each(Operation &operation)
Traverse all the container and performs an operation on each element.
Main namespace for Aleph-w library functions.
void reverse(Itor beg, Itor end)
Reverse elements in a range.
void rotate_left(T *ptr, const size_t n, size_t m) noexcept
Rotate array elements left by m positions.
void open_gap(Tarray &ptr, size_t n, size_t pos=0, size_t num_entries=1)
Open a gap in an array by shifting elements right.
void rotate_right(T *ptr, const size_t n, size_t m) noexcept
Rotate array elements right by m positions.
void close_gap(T *ptr, size_t n, size_t pos, size_t num_entries=1)
Close a gap in an array by shifting elements left.
DynList< T > maps(const C &c, Op op)
Classic map operation.
Lazy and scalable dynamic array implementation.