Write a function reverse, that takes in a vector<T> and reverses the vector, i.e. modifies the input vector.
#include <vector>
using namespace std;
template <typename T>
void reverse(vector<T> v) {
//code..
}
Using STL algorithms
#include <vector>
#include <algorithm>
using namespace std;
template <typename T>
void reverse(vector<T>& vec)
{
reverse(vec.begin(), vec.end());
}
int main()
{
vector<int> vec {1,2,3,4,5,6,7};
reverse(vec);
return 0;
}
Using iterators
#include <vector>
using namespace std;
template <typename T>
void reverse(vector<T>& vec)
{
auto beginIt = vec.begin();
auto endIt = --vec.end();
for(; beginIt < endIt; ++beginIt, --endIt)
{
T tmp = *beginIt;
*beginIt = *endIt;
*endIt = tmp;
}
}
int main()
{
vector<int> vec {1,2,3,4,5,6,7,8};
reverse(vec);
return 0;
}
Using iterator and std::swap
#include <vector>
#include <memory>
using namespace std;
template <typename T>
void reverse(vector<T>& vec)
{
auto beginIt = vec.begin();
auto endIt = --vec.end();
for (; beginIt < endIt; ++beginIt, --endIt)
{
std::swap(*beginIt, *endIt);
}
}
int main()
{
vector<int> vec{ 1,2,3,4,5,6,7 };
reverse(vec);
return 0;
}