Kenneth Bruen
3 years ago
4 changed files with 127 additions and 0 deletions
@ -0,0 +1,32 @@ |
|||||||
|
# CCIoT Homework Lab 2 |
||||||
|
|
||||||
|
## Slide 12 |
||||||
|
|
||||||
|
### Problem |
||||||
|
|
||||||
|
Try the following: |
||||||
|
|
||||||
|
1. Create a vector of whatever type you like (minimum length of 10); |
||||||
|
2. Print it’s content; |
||||||
|
3. Erase the odd elements; |
||||||
|
4. Replace the first element and the last element with another value; |
||||||
|
5. Create a rule that erases the 5th element from the vector; |
||||||
|
6. Use cppreference in the meantime ☺ |
||||||
|
|
||||||
|
### Solution |
||||||
|
|
||||||
|
See [slide12.cpp](./slide12.cpp). |
||||||
|
|
||||||
|
## Slide 13 |
||||||
|
|
||||||
|
### Problem |
||||||
|
|
||||||
|
Try the same stuff with std::list, observe the differences. |
||||||
|
|
||||||
|
### Solution |
||||||
|
|
||||||
|
See [slide13.cpp](./slide13.cpp). |
||||||
|
|
||||||
|
The difference observed is at line 38. |
||||||
|
Because `std::list` has a bidirectional iterator, not a random access one, skipping 4 elements cannot be done. |
||||||
|
Instead, I had to use `std::next` in order to advance the iterator 4 times separately in order to find the 5th element and erase it. |
@ -0,0 +1,47 @@ |
|||||||
|
#include <iostream> |
||||||
|
#include <vector> |
||||||
|
|
||||||
|
// 2.
|
||||||
|
template <class T> |
||||||
|
void printEnumerable(const T &enumerable) { |
||||||
|
bool first = true; |
||||||
|
for (const auto& item : enumerable) { |
||||||
|
if (first) first = false; |
||||||
|
else std::cout << ", "; |
||||||
|
|
||||||
|
std::cout << item; |
||||||
|
} |
||||||
|
std::cout << std::endl; |
||||||
|
} |
||||||
|
|
||||||
|
// 4.
|
||||||
|
template <class T, typename V> |
||||||
|
void replaceFirstLast(T& enumerable, const V& newValue) { |
||||||
|
*std::begin(enumerable) = newValue; |
||||||
|
*std::rbegin(enumerable) = newValue; |
||||||
|
} |
||||||
|
|
||||||
|
// 5.
|
||||||
|
template <class T> |
||||||
|
void erase5th(T& enumerable) { |
||||||
|
enumerable.erase(std::begin(enumerable) + 4); |
||||||
|
} |
||||||
|
|
||||||
|
int main() { |
||||||
|
// 1.
|
||||||
|
std::vector<int> v {8, 4, 6, 1, 5, 3, 9, 5, 8, 123, 1, 2, 31, 24, 124, 12, 42, 131}; |
||||||
|
|
||||||
|
// 2.
|
||||||
|
printEnumerable(v); |
||||||
|
|
||||||
|
// 4.
|
||||||
|
replaceFirstLast(v, 7); |
||||||
|
|
||||||
|
// 5.
|
||||||
|
erase5th(v); |
||||||
|
|
||||||
|
// Print again to see changes
|
||||||
|
printEnumerable(v); |
||||||
|
|
||||||
|
return 0; |
||||||
|
} |
@ -0,0 +1,47 @@ |
|||||||
|
#include <iostream> |
||||||
|
#include <list> |
||||||
|
|
||||||
|
// 2.
|
||||||
|
template <class T> |
||||||
|
void printEnumerable(const T &enumerable) { |
||||||
|
bool first = true; |
||||||
|
for (const auto& item : enumerable) { |
||||||
|
if (first) first = false; |
||||||
|
else std::cout << ", "; |
||||||
|
|
||||||
|
std::cout << item; |
||||||
|
} |
||||||
|
std::cout << std::endl; |
||||||
|
} |
||||||
|
|
||||||
|
// 4.
|
||||||
|
template <class T, typename V> |
||||||
|
void replaceFirstLast(T& enumerable, const V& newValue) { |
||||||
|
*std::begin(enumerable) = newValue; |
||||||
|
*std::rbegin(enumerable) = newValue; |
||||||
|
} |
||||||
|
|
||||||
|
// 5.
|
||||||
|
template <class T> |
||||||
|
void erase5th(T& enumerable) { |
||||||
|
enumerable.erase(std::next(std::begin(enumerable), 4)); |
||||||
|
} |
||||||
|
|
||||||
|
int main() { |
||||||
|
// 1.
|
||||||
|
std::list<int> v {8, 4, 6, 1, 5, 3, 9, 5, 8, 123, 1, 2, 31, 24, 124, 12, 42, 131}; |
||||||
|
|
||||||
|
// 2.
|
||||||
|
printEnumerable(v); |
||||||
|
|
||||||
|
// 4.
|
||||||
|
replaceFirstLast(v, 7); |
||||||
|
|
||||||
|
// 5.
|
||||||
|
erase5th(v); |
||||||
|
|
||||||
|
// Print again to see changes
|
||||||
|
printEnumerable(v); |
||||||
|
|
||||||
|
return 0; |
||||||
|
} |
Loading…
Reference in new issue