1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| #include <array>
#include <deque>
#include <iostream>
#include <iterator>
#include <list>
#include <string>
#include <vector>
auto getElementByCircularIndex = [](auto& container, auto index) {
const auto size = container.size();
auto inputIterator = container.begin();
const auto offset = index >= 0 ? index%size : size - (-index)%size;
std::advance(inputIterator, offset);
return *inputIterator;
};
int main()
{
const std::array <std::string, 7> daysArray = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
const std::deque <std::string> daysDeque = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
const std::list <std::string> daysList = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
const std::vector<std::string> daysVector = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
std::cout << getElementByCircularIndex(daysArray, 14) << " "; // prints "Monday"
std::cout << getElementByCircularIndex(daysDeque, 2) << " "; // prints "Wednesday"
std::cout << getElementByCircularIndex(daysList, 74) << " "; // prints "Friday"
std::cout << getElementByCircularIndex(daysVector, -15) << " "; // prints "Sunday"
return 0;
} |
Partager