C++에서 STL 유틸리티를 사용하는 역방향 벡터 요소
-
std::reverse
알고리즘을 사용하여 C++에서 벡터 요소 반전 -
std::shuffle
알고리즘을 사용하여 C++에서 무작위로 벡터 요소 재정렬 -
std::rotate
알고리즘을 사용하여 C++에서 벡터 요소 회전
이 기사에서는 C++에서 STL 유틸리티를 사용하여 벡터 요소를 반전하는 방법을 소개합니다.
std::reverse
알고리즘을 사용하여 C++에서 벡터 요소 반전
std::reverse
는 STL 알고리즘의 일부이며 주어진 범위에서 요소의 순서를 바꾸는 데 사용할 수 있습니다. std::reverse
알고리즘은 내부적으로 첫 번째와 마지막 쌍에서 시작하는 두 요소를 교환합니다. std::reverse
는 주어진 범위의 반복자를 나타내는 두 개의 인수를 사용합니다. 다음 예제에서는 임의의 정수를vector
객체로 생성합니다.이 객체는std::reverse
알고리즘을 사용하여 반전되고 결과를cout
스트림에 출력합니다.
#include <iomanip>
#include <iostream>
#include <iterator>
#include <random>
#include <vector>
using std::cout;
using std::endl;
using std::left;
using std::setw;
void generateNumbers(std::vector<int> &arr, size_t &width) {
std::srand(std::time(nullptr));
for (size_t i = 0; i < width; i++) {
arr.push_back(std::rand() % 100);
}
}
int main() {
size_t width = 10;
std::vector<int> arr;
arr.reserve(width);
generateNumbers(arr, width);
cout << left << setw(10) << "arr: ";
copy(arr.begin(), arr.end(), std::ostream_iterator<int>(cout, "; "));
cout << endl;
std::reverse(arr.begin(), arr.end());
cout << left << setw(10) << "arr: ";
copy(arr.begin(), arr.end(), std::ostream_iterator<int>(cout, "; "));
cout << endl;
return EXIT_SUCCESS;
}
출력:
arr: 78; 56; 63; 59; 16; 7; 54; 98; 87; 92;
arr: 92; 87; 98; 54; 7; 16; 59; 63; 56; 78;
std::shuffle
알고리즘을 사용하여 C++에서 무작위로 벡터 요소 재정렬
std::shuffle
은 각 요소의 순열이 동일한 확률을 갖도록 범위의 요소를 무작위로 재정렬하는 데 사용할 수 있습니다. 이 함수는 범위의 시작 및 종료 반복기를 나타내는 두 개 이상의 인수를 사용합니다. 선택적으로std::shuffle
은 난수 생성기 함수를 나타내는 세 번째 인수를 사용할 수 있습니다. 이 경우<random>
헤더 아래에 제공되는mersenne_twister_engine
을 활용했습니다.
#include <iomanip>
#include <iostream>
#include <iterator>
#include <random>
#include <vector>
using std::cout;
using std::endl;
using std::left;
using std::setw;
void generateNumbers(std::vector<int> &arr, size_t &width) {
std::srand(std::time(nullptr));
for (size_t i = 0; i < width; i++) {
arr.push_back(std::rand() % 100);
}
}
int main() {
size_t width = 10;
std::vector<int> arr;
arr.reserve(width);
generateNumbers(arr, width);
cout << left << setw(10) << "arr: ";
copy(arr.begin(), arr.end(), std::ostream_iterator<int>(cout, "; "));
cout << endl;
std::shuffle(arr.begin(), arr.end(), std::mt19937(std::random_device()()));
cout << left << setw(10) << "arr: ";
copy(arr.begin(), arr.end(), std::ostream_iterator<int>(cout, "; "));
cout << endl;
return EXIT_SUCCESS;
}
출력:
arr: 40; 77; 74; 41; 79; 21; 81; 98; 13; 90;
arr: 79; 41; 90; 77; 21; 81; 98; 74; 13; 40;
std::rotate
알고리즘을 사용하여 C++에서 벡터 요소 회전
STL 알고리즘에 포함 된 또 다른 유용한 기능은-std::rotate
입니다. 이 함수는 요소를 왼쪽으로 이동하고 벡터 경계 외부로 이동 한 요소를 둘러 쌉니다. std::rotate
는ForwardIt
반복기 유형의 세 인수를 취하고 두 번째 인수가 가리키는 요소가 새로 생성 된 목록의 첫 번째 위치로 이동되도록 회전을 수행합니다.
#include <iomanip>
#include <iostream>
#include <iterator>
#include <random>
#include <vector>
using std::cout;
using std::endl;
using std::left;
using std::setw;
void generateNumbers(std::vector<int> &arr, size_t &width) {
std::srand(std::time(nullptr));
for (size_t i = 0; i < width; i++) {
arr.push_back(std::rand() % 100);
}
}
int main() {
size_t width = 10;
std::vector<int> arr;
arr.reserve(width);
generateNumbers(arr, width);
cout << left << setw(10) << "arr: ";
copy(arr.begin(), arr.end(), std::ostream_iterator<int>(cout, "; "));
cout << endl;
std::rotate(arr.begin(), arr.begin() + (width / 2), arr.begin() + width);
cout << left << setw(10) << "arr: ";
copy(arr.begin(), arr.end(), std::ostream_iterator<int>(cout, "; "));
cout << endl;
return EXIT_SUCCESS;
}
출력:
arr: 75; 16; 79; 62; 53; 5; 77; 50; 31; 54;
arr: 5; 77; 50; 31; 54; 75; 16; 79; 62; 53;
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook