vectors stl
예제와 함께 STL에서 벡터의 역할.
지금까지이 C ++ 시리즈에서는 크기가 고정 된 정적 배열을 보았습니다.
프로그램 중간에 배열에 더 많은 요소를 저장해야한다면 불가능 해지며 배열 제한을 초과하는 요소를 저장하려고하는 순간 'out_of_bound'예외가 발생합니다.
이에 대한 한 가지 해결책은 배열을 최대 용량으로 선언하여 런타임에 더 많은 요소를 저장하는 데 문제가 발생하지 않도록하는 것입니다. 그러나 이러한 배열은 너무 많은 메모리를 낭비하고 있다는 점에서 심각한 단점이 있습니다.
=> 여기에서 전체 C ++ 교육 시리즈를 확인하십시오.
이러한 모든 문제에 대한 답은 필요에 따라 자체적으로 확장되는 동적 어레이를 사용하는 것입니다. STL은 벡터 컨테이너의 형태로이 동적 배열을 제공합니다.
학습 내용 :
- 벡터를 어떻게 정의합니까?
- std :: Vector 클래스를 사용하여 C ++에서 벡터 선언
- 벡터 초기화
- 벡터 반복기
- 벡터 함수
- 벡터 용량
- 벡터 수정 자
- 2D 벡터
- 벡터 예
- 결론
- 추천 도서
벡터를 어떻게 정의합니까?
벡터는 요소가 삽입되거나 삭제 될 때 자동으로 크기를 조정하는 동적 배열 컨테이너입니다. 벡터 저장은 벡터 컨테이너 자체에서 처리합니다.
벡터의 요소는 인접한 위치에 저장됩니다. 배열과 마찬가지로 벡터 요소도 반복기를 사용하여 순회하고 액세스 할 수 있습니다.
std :: Vector 클래스를 사용하여 C ++에서 벡터 선언
STL 벡터 클래스‘ std :: vector ’는 헤더 아래에 정의되어 있습니다. 따라서 벡터 컨테이너를 사용하려면 다음과 같이 프로그램에이 헤더를 포함해야합니다.
#include
아래와 같이 빈 벡터를 선언 할 수 있습니다.
std::vector myvec;
위의 코드 줄은 정수 유형의 요소로 벡터를 만듭니다. 메모리에서 이것은 myvec로 배치됩니다.
벡터 초기화
벡터를 선언 할 때 값으로 초기화 할 수 있습니다.
C 대 C ++ 구문
이것은 다음과 같이 수행됩니다.
#include int main() { std::vector myvec = {1, 1, 2, 3, 5}; }
위 코드에서 우리는 피보나치 시퀀스의 처음 5 개 요소를 포함하는 myvec라는 이름의 int 유형의 벡터를 선언합니다.
이 벡터의 메모리 레이아웃은 다음과 같습니다.
벡터 반복기
이미 언급했듯이 반복기를 사용하여 벡터를 순차적으로 탐색합니다.
벡터는 요소를 단계별로 실행하기 위해 다음 반복기 함수를 지원합니다.
- begin () – 벡터 컨테이너의 첫 번째 요소를 가리키는 반복기를 반환합니다.
- end () – 벡터의 마지막 요소 뒤에 오는 요소를 가리키는 반복기를 반환합니다.
- rbegin () – 벡터 컨테이너의 마지막 요소를 가리키는 역방향 반복기를 반환합니다.
- 렌더링 ()- 벡터 컨테이너의 첫 번째 요소를 가리키는 역방향 반복기를 반환합니다.
- cbegin ()- 벡터 컨테이너의 첫 번째 요소를 가리키는 상수 반복기를 반환합니다.
- 몇 ()- 벡터 컨테이너의 마지막 요소 다음의 요소를 가리키는 상수 반복기를 반환합니다.
- crbegin () – 벡터 컨테이너의 마지막 요소를 가리키는 역상 수 반복기를 반환합니다.
- crend () – 벡터 컨테이너의 첫 번째 요소를 가리키는 역상 수 반복기를 반환합니다.
이러한 반복기 함수를 보여주는 예제를 살펴 보겠습니다.다른 기능도 유사하게 사용할 수 있습니다.
#include #include using namespace std; int main() { vector v1; for (int i = 1; i <= 5; i++) v1.push_back(i+1); cout << 'Output of Vector with begin and end: '; for (auto i = v1.begin(); i != v1.end(); ++i) cout << *i << ' '; cout << '
Output of Vector with rbegin and rend: '; for (auto itr = v1.rbegin(); itr != v1.rend(); ++itr) cout << *itr << ' '; cout << '
Output Vector of with cbegin and cend: '; for (auto itc = v1.cbegin(); itc != v1.cend(); ++itc) cout << *itc << ' '; cout << '
Output Vector of with crbegin and crend : '; for (auto icr = v1.crbegin(); icr != v1.crend(); ++icr) cout << *icr << ' '; return 0; }
산출:
시작과 끝이있는 벡터의 출력 : 2 34 5 6
rbegin 및 rend가있는 Vector의 출력 : 6 5 4 3 2
cbegin 및 cend가있는의 출력 벡터 : 2 34 5 6
crbegin 및 crend가있는의 출력 벡터 : 6 5 4 3 2
따라서이 코드에서 벡터를 선언하고 push_back 함수를 사용하여 값을 삽입합니다. 그런 다음 위에서 설명한 각 반복기 함수를 사용하여 벡터를 표시합니다. 사용 된 반복기 함수에 따라 출력에서 알 수 있듯이 벡터가 표시되는 순서가 변경됩니다.
벡터 함수
벡터 정렬
벡터에서 이미 본 STL 알고리즘을 사용할 수 있습니다.
다음은 벡터에 '정렬'을 사용하는 예입니다.
#include #include #include using namespace std; int main() { vector myvec = {10,50,30,20,60,40}; cout<<'Original Vector'< 산출:
원래 벡터
10 50 30 20 60 40
정렬 된 벡터
10 20 30 40 50 60
위의 예에서는 벡터를 초기화 한 다음 정렬 알고리즘을 적용하여 벡터를 정렬했습니다.
벡터의 인쇄 요소
벡터는 반복기와 'cout'스트림을 사용하여 인쇄 할 수 있습니다. 반복기를 사용하여 각 벡터 요소를 단계별로 실행하고 cout으로 인쇄 할 수 있습니다.
다음 예는이를 보여줍니다.
#include #include using namespace std; int main() { vector v1; for (int i = 1; i <= 5; i++) v1.push_back(i+2); cout << 'Output of Vector with begin and end: '; for (auto i = v1.begin(); i != v1.end(); ++i) cout << *i << ' '; }
산출:
시작과 끝이있는 벡터의 출력 : 34 5 6 7
벡터 용량
크기, 최대 크기 등을 결정하기 위해 벡터에 작용하는 다양한 함수가 있습니다.
다음과 같이 기능을 나열합니다.
(i) 벡터의 크기
size () 함수는 벡터 컨테이너의 요소 수를 반환합니다. 이것은 std :: vector 클래스의 내장 함수이며 벡터의 크기를 찾는 데 직접 사용할 수 있습니다.
어떤 소프트웨어 테스트 인증이 가장 좋은지
size () 함수를 사용하는 벡터의 예를 보겠습니다.
#include #include using namespace std; int main() { vector myvec = {1, 1, 2, 3, 5, 8}; cout << 'Vector Size : ' << myvec.size(); return 0; }
산출:
벡터 크기 : 6
위의 프로그램에서 우리는 6 개의 요소로 구성된 벡터 myvec을 정의했습니다. 다음으로 myvec에서 size () 함수를 호출하면 올바른 크기가 표시됩니다.
(ii) 벡터 크기 조정
또한 'n'개의 요소를 보유 할 수 있도록 벡터의 크기를 원하는 크기로 조정할 수 있습니다. 이것은 std :: vector 클래스의 'resize ()'함수로 이루어집니다. resize 함수는 벡터의 크기를 매개 변수로 사용하고 벡터 컨테이너의 크기를 지정된 크기로 조정합니다.
예제의 도움으로 이것을 이해합시다.
#include #include using namespace std; int main() { vector myvec = {1, 1, 2, 3, 5, 8}; cout << '
Vector elements are: '; for (auto it = myvec.begin(); it != myvec.end(); it++) cout << *it << ' '; myvec.resize(4); cout << '
Vector Size after resize: ' << myvec.size(); cout << '
Vector elements after resizing are: '; for (auto it = myvec.begin(); it != myvec.end(); it++) cout << *it << ' '; return 0; }
산출:
벡터 요소는 다음과 같습니다. 1 1 2 3 5 8
크기 조정 후 벡터 크기 : 4
크기 조정 후 벡터 요소는 다음과 같습니다. 1 1 2 3
위의 프로그램에서 우리는 처음에 크기 6의 벡터 myvec를 정의합니다. 그런 다음 크기 = 4 인이 벡터에 대해 resize 함수를 호출합니다. 이것은 이제 벡터의 크기를 4로 조정해야 함을 의미합니다.
크기 조정 함수를 호출 한 후 벡터를 다시 인쇄합니다. 벡터의 크기를 4로 조정하면 나머지 요소는 삭제되고 벡터의 4 개 요소 만 표시됩니다.
크기 및 크기 조정 기능 외에도 벡터 클래스는 벡터의 용량을 조작 할 수있는 더 많은 기능을 지원합니다. 그들은:
- max_size () : 최대 크기, 즉 벡터가 보유 할 수있는 최대 요소 수를 반환합니다.
- 생산 능력(): 현재 할당 된 저장 공간의 크기를 반환합니다. 이것은 요소 수로 반환됩니다.
- 빈(): 컨테이너가 비어 있는지 확인합니다.
- shrink_to_fit () : 크기에 맞게 벡터 용량을 축소하고 다른 모든 요소를 버립니다.
- 비축(): n 개의 요소를 포함하도록 벡터 용량을 예약합니다.
벡터 수정 자
수정자는 벡터 컨테이너의 내용을 수정하는 데 사용할 수있는 작업 또는 함수입니다. 수정 자로 사용되는 몇 가지 주요 기능을 살펴 보겠습니다.
벡터에 새 값 할당
std :: vector에서 제공하는 수정 자 함수 중 하나는 할당 함수입니다. 할당 기능은 이전 값을 대체하여 벡터에 새 값을 할당합니다.
이것은 다음 예제에서 설명됩니다.
#include #include using namespace std; int main() { // Assign vector vector myvec; // assign value 10 5 times myvec.assign(5, 10); cout << 'The vector elements: '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; }
산출:
벡터 요소 : 10 10 10 10 10
위 코드에서 우리는 int 유형의 벡터를 선언합니다. 그런 다음 매개 변수 5, 10을 사용하여 함수를 할당하도록 호출합니다. 이는 요소 10을 벡터에 5 번 할당한다는 것을 의미합니다. 벡터를 표시하면 벡터에 5 개의 요소가 있고 모두 값이 5 인 것을 볼 수 있습니다.
벡터 지우기
벡터를 수정하기 위해 std :: vector에서 제공하는 다음 함수는 '지우기'함수입니다. 지우기 함수는 지정된 범위 또는 벡터의 위치에서 요소를 제거합니다.
지우기 기능의 예를 살펴 보겠습니다.
#include #include using namespace std; int main() { // Initialize vector vector myvec = {1,1,2,3,5}; cout << '
Vector elements:'; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // remove the first element myvec.erase(myvec.begin()); cout<<'
Vector size after erase: '< 산출:
벡터 요소 : 1 1 2 3 5
지우기 후 벡터 크기 : 4
지우기 작업 후 벡터 : 1 2 3 5
크기 조정 기능에 대한 위의 출력에서 볼 수 있듯이 지우거나 제거 할 요소의 범위 또는 위치를 지정합니다. 위의 예에서는 벡터의 첫 번째 요소를 가리키는 위치를 지정했습니다.
벡터에 요소 삽입
벡터 클래스 std :: vector는 벡터에 값을 삽입하는 또 다른 함수를 제공합니다. 삽입 기능을 사용하면 지정된 위치 앞에 요소를 벡터에 삽입 할 수 있습니다.
이것은 다음 예제를 통해 명확해질 것입니다..
#include #include using namespace std; int main() { // Assign vector vector myvec = {2,3,4}; cout << '
Initial vector: '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // inserts 20 at the beginning, 30 after that myvec.insert(myvec.begin(), 20); myvec.insert(myvec.begin()+1,30); cout << '
New vector after insert: '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; }
산출:
초기 벡터 : 2 34
삽입 후 새 벡터 : 20 30 2 3 4
위의 프로그램은 처음에 3 개의 요소가있는 벡터를 선언합니다. 그런 다음 insert 함수를 두 번 호출하여 벡터의 첫 번째 위치와 두 번째 위치에 각각 값 20과 30을 삽입합니다. 그런 다음 변경된 벡터를 표시합니다.
벡터 내용 바꾸기
벡터 클래스는 또한 한 벡터의 내용을 동일한 유형 및 크기의 다른 벡터와 교환하거나 교환 할 수있는 기능을 제공합니다. 이것은 벡터 내장 함수 '스왑'에 의해 달성됩니다.
다음 코드를 고려하십시오.
#include #include using namespace std; int main() { // swap operation vector v1, v2; v1.push_back(1); v1.push_back(3); v2.push_back(5); v2.push_back(7); cout << '
Vector 1: '; for (int i = 0; i < v1.size(); i++) cout << v1(i) << ' '; cout << '
Vector 2: '; for (int i = 0; i < v2.size(); i++) cout << v2(i) << ' '; // Swaps v1 and v2 v1.swap(v2); cout << '
After Swap
Vector 1: '; for (int i = 0; i < v1.size(); i++) cout << v1(i) << ' '; cout << '
Vector 2: '; for (int i = 0; i < v2.size(); i++) cout << v2(i) << ' '; }
산출:
벡터 1 : 1 3
벡터 2 : 5 7
스왑 후
벡터 1 : 5 7
벡터 2 : 1 3
위의 코드는 스와핑 전후의 두 벡터 내용을 보여줍니다.
벡터에서 값 지우기
지우기 기능을 사용하여 벡터에서 하나 이상의 요소를 제거하는 것과 달리 벡터 컨테이너의 모든 요소를 제거 할 수있는 또 다른 기능 '지우기'가 있습니다.
아래 프로그램에서 벡터 컨테이너의 명확한 기능을 보여줍니다.
#include #include using namespace std; int main() { // swap operation vector v1; v1.push_back(1); v1.push_back(3); v1.push_back(5); v1.push_back(7); cout<<'
Size of vector v1: '< 산출:
벡터 v1의 크기 : 4
벡터 1 : 1 3 5 7
clearfunction 호출 후 벡터 v1의 크기 : 0
여기에서 먼저 벡터를 선언 한 다음 그 안에 요소를 푸시합니다. clear () 함수를 호출하면 벡터의 모든 요소가 한 번에 제거되는 것을 볼 수 있습니다.
at (pos)
이 함수는 벡터 내의 위치 'pos'에있는 요소에 대한 참조를 반환합니다.
사용할 가짜 이메일 주소 목록
이것은 벡터 요소에 액세스하는 데 사용되는 함수 중 하나입니다.
예는 다음과 같습니다.
#include #include using namespace std; int main() { // Assign vector vector myvec = {1,1,2,3,5,8}; cout<<'
Element at position 3 : '< 산출:
위치 3 : 3의 요소
예에서 볼 수 있듯이 'at'함수는 지정된 위치에서 벡터의 요소에 액세스하는 데 사용됩니다.
앞
함수‘front’는 벡터의 첫 번째 요소에 대한 참조를 반환합니다. 이것은 벡터 컨테이너의 요소에 액세스하는 데 사용하는 또 다른 기능입니다.
다음 예는 '전면'기능의 사용법을 보여줍니다.
#include #include #include using namespace std; int main() { // Initialize vector vector myvec = {1,1,2,3,5,8}; cout<<'
Input vector: '; for(auto it=myvec.begin();it 산출:
입력 벡터 : 12 34 5 8
벡터 앞에있는 요소 : 1
뒤
'front'함수와 유사하게 back 함수는 벡터 컨테이너의 마지막 요소에 액세스하는 데 사용됩니다. 'back'함수는 벡터 컨테이너의 마지막 요소에 대한 참조를 반환합니다.
다음 예는 '뒤로'함수 사용법을 보여줍니다.
#include #include #include using namespace std; int main() { // Initialize vector vector myvec = {1,1,2,3,5,8}; cout<<'
Input vector: '; for(auto it=myvec.begin();it 산출:
입력 벡터 : 12 34 5 8
벡터 뒤에있는 요소 : 8
벡터에서 요소 찾기
'찾기'기능은 특정 요소 (키라고 함)가 벡터에 있는지 여부를 찾는 데 사용됩니다. 이 기능은 빠르고 효율적이어야합니다. 값을 찾으면 함수가 반환됩니다.
다음 예제는 찾기 기능의 사용법을 보여줍니다.
#include #include #include using namespace std; int main() { // Assign vector vector myvec = {1,1,2,3,5,8}; cout<<'
Input vector: '; for(auto it=myvec.begin();itkey; if(find(myvec.begin(),myvec.end(),key)!= myvec.end()) cout<<'
Element found'; else cout<<'
Element not found'; }
산출:
입력 벡터 : 12 34 5 8
검색 할 키 입력 : 0
요소를 찾을 수 없습니다.
2D 벡터
2 차원 벡터는 '벡터의 벡터'라고도합니다. 2 차원 배열과 마찬가지로 2 차원 벡터의 요소도 행렬 형태로 배열됩니다.
2D 벡터에 대한 예제 프로그램은 다음과 같습니다.
#include #include // for 2D vector using namespace std; int main() { // Initializing 2D vector 'odd_vect' with vector odd_vect{ { 1, 3, 5 }, { 7, 9, 11 }, { 13,15,17 } }; // Displaying the 2D vector cout<<'2D vector : '; cout< 산출:
2D 벡터 :
1 3 5
7 9 11
13 15 17
위의 예에서 2D 벡터가 정의되는 방식에 유의하십시오. 다른 벡터 내부의 벡터로 정의됩니다. 이 2D 벡터를 표시하는 동안 2D 배열을 표시하는 것과 동일한 접근 방식을 사용합니다.
벡터 예
다음은 대부분의 벡터 연산을 포함하는 벡터 예제입니다.
#include #include using namespace std; int main() { // Assign vector vector myvec; // assign value 10 5 times myvec.assign(5, 10); cout << 'The vector elements: '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // push value 5 in myvec myvec.push_back(5); int n = myvec.size(); cout << '
The new vector after push_back:'; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // pop the element myvec.pop_back(); cout<<'
New vector after pop_back : '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // inserts 20 at the beginning myvec.insert(myvec.begin(), 20); cout << '
New vector after insert: '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // remove the first element myvec.erase(myvec.begin()); cout<<'
Vector size after erase: '< 산출:
벡터 요소 : 10 10 10 10 10
push_back 이후의 새로운 벡터 : 10 10 10 10 10 5
pop_back 이후의 새 벡터 : 10 10 10 10 10
삽입 후 새 벡터 : 20 10 10 10 10 10
지우기 후 벡터 크기 : 5
첫 번째 요소 삭제 후 : 10 10 10 10 10
다음은 동일한 스크린 샷입니다.

위의 예에서 벡터를 선언 한 다음 assign 및 push_back 함수를 사용하여 벡터에 요소를 입력합니다. 그런 다음 pop_back 함수를 사용하여 벡터 끝에서 요소를 제거합니다. 그런 다음 요소 삽입을 사용하여 벡터에 하나의 요소를 다시 추가 한 다음 지우기 기능을 사용하여 요소를 지 웁니다.
이것은 다양한 기능을 보여주는 벡터 컨테이너의 종단 간 예제입니다.
결론
이것으로 우리는 벡터에 대한이 튜토리얼을 끝냈습니다.
다음 튜토리얼에서는 배열 및 벡터 라인과 유사한 STL의 '목록'컨테이너에 대해 알아 봅니다.
=> 여기에서 완벽한 C ++ 교육 가이드를 확인하십시오.
추천 도서