(수근수근)

[C++]선형자료구조 - vector 본문

C++

[C++]선형자료구조 - vector

InformationFarm 2020. 4. 6. 15:10

Vector

  • 개체들을 연속적이 메모리에 저장
  • sequence container 에 속한다. 
  • 동적으로 확장 축소가 가능한 dynamic array이다.
  • 원소를 컨테이너의 끝에 삽입/제거 하는 것이 빠르다 

Vector method

https://hyeonstorage.tistory.com/324

 

What is Iterator?

https://eehoeskrap.tistory.com/263
  • 컨테이너에 저장되어있는 원소들은 참조할 때 사용
  • 요소의 값 확인, 컨테이너 안에 요소들은 이동할 수 있는 연산 제공
  • 포인터는 널을 가질 수 있는데 이는 아무것도 가리키지 않는다는 의미
  • end()함수는 끝이 아니다. 맨 마지막의 원소 다음번의 원소
    • 아무 원소도 없는 컨테이너의 begin()과 end()는 같다

Vector 예제 실습

 

#include<iostream>
#include<vector>
#include<string>
#include<stdio.h>

using namespace std;

/**
	5명의 학생 중 가장 높은 학생의 점수 출력하기
*/
//1. 선언 및 초기화
vector<int> vScore;



int maxFind(vector<int> v){
	printf("vector size : %d", v.size());
	int temp = v.at(0);
	vector<int>::iterator iter;

	for(iter =v.begin();iter!=v.end();++iter){
		if(temp<*iter){
			temp = *iter;
		}
	}
	return *iter;
}


void main(){

	//2. 사이즈 저장
	vScore.reserve(5); // 벡터메모리에 공간할당
	
	//3. 자료 삽입
	vScore.push_back(10);
	vScore.push_back(50);
	vScore.push_back(70);
	vScore.push_back(80);
	vScore.push_back(90);
	
	//4. 최대값 찾기
	int result = maxFind(vScore);

	printf("점수 최대값 : %d", result);
}

이렇게 실행했더니 런타임 에러 메시지를 봤다..

이유? end() 는 마지막 원소가 아니라 맨 마지막의 다음번의 원소이다. 이것을 역참조 (deferenced)해선 안된다!

 

int maxFind(vector<int> v){
	printf("vector size : %d", v.size());
	int temp = *max_element(v.begin(),v.end());

	return temp;
}

 

소스변경해서 해결... 

'C++' 카테고리의 다른 글

[C++] 기초 관련 용어  (0) 2020.05.18
Linking / Linker  (0) 2020.05.15
암호화 알고리즘 AES-256  (0) 2020.05.07
HashMap 자료구조 study  (0) 2020.04.06
[C++] 상속 공부  (0) 2020.03.25
Comments