• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

교수님의 강의를 완강 후, 혼자 알고리즘 책을 통해서 독학하고 있는 학생입니다.

19.10.07 22:42 작성 조회수 130

0

안녕하세요! 저는 교수님의 강의를 완강하고, 알고리즘 책을 통해서 공부하고 있습니다.

제가 vector stl을 이해하기로는, vector<int> n[20] 이런 식으로 사용하는 것으로 알고 있는데요.

근데, 해당 책에서는 vector <int> thePouring( vector<int> capacitied, vector<int>bottle )이런 식으로

리스트의 크기를 적는 대신에, 벡터들을 괄호를 묶는 경우도 존재하더라구요.

제가 비 전공자라 어디 여쭤볼 곳도 없고, 여러 권의 책들을 찾아봐도 설명이 있지 않아서 이렇게 여쭤보게 되었습니다.

혹시, 실례가 되지 않는다면, 짧게라도 알려주실 수 있으신지요?

감사합니다.

답변 5

·

답변을 작성해보세요.

0

다람님의 프로필

다람

질문자

2019.10.09

아! 깔끔하게 이해가 되었습니다. 감사합니다 교수님!

0

vector<int> thePouring(vector <int> capacities,
	                         vector<int> bottles,
				 vector<int> fromId,
				 vector<int> toId)
	{ ........
........
return bottles;
}

위에 코드에서 thePouring은 kiwiJuiceEasy 클래스의 멤버함수입니다. 변수명이 아닙니다.

즉 thePouring은 함수명이며 이함수는 호출하는 곳에 vector<int>형 자료를 return(반환) 하겠다는 함수입니다.

함수를 선언할 때는 함수명 앞에 반환하는 자료형을 붙입니다. 

만약 정수형 자료를 반환하는 함수는 int thePouring(int x, float y, char z){..............} 이런식으로 선언합니다.

여기서 int x, float y, char z 는 값을 전달받는 함수의 매개변수입니다.

즉 위에 vector<int> thePouring(vector<int> capacities, vector<int> bottles) 이런식으로 함수를 선언하면 반환하는 자료형은 정수형 vector이고, 매개변수로 정수형 벡터 capacities와 bottles를 선언해 벡터 자료를 전달받겠다는 의미입니다.

이 설명이 잘 이해가 안되시면 C++ 클래스와 함수에 대해 배우셔야 합니다.

인프런에 "두들낙서의 C/C++"강좌가 무료이니 이 강좌의 함수부분과 클래스 부분을 들으면 좋을 것 같습니다.

0

다람님의 프로필

다람

질문자

2019.10.08

강의와 관련되지 않은 질문임에도 답변을 주셔서 다시 한번 감사드립니다.

0

다람님의 프로필

다람

질문자

2019.10.08

답변주셔서 감사합니다 교수님

제가 공부하고 있는 책은 "TOPCODER 알고리즘 트레이닝"입니다.

해당 소스 코드는 다음과 같습니다. (책 기준 72pg)

class kiwiJuiceEasy{
public:
	vector <int> the Pouring(vector <int> capacities,
	                         vector<int> bottles,
				 vector<int> fromId,
				 vector<int> toId)
	{
		for(int i =0; i<fromId.size(); i++){
			int f = fromId[i];
			int t = toId[i];
			int space = capacities[t] - bottles[t];
			
			if(space >= bottles[f]){
				int vol = bottles[f];
				bottles[t] += vol;
				bottles[f] =0;
			}
			else{
				int vol = space;
				bottles[t]+= vol;
				bottles[f]-= vol;
			}
		}
		return bottles;
	}
};

0

제가 알고있는 벡터 생성자 호출은 아래와 같습니다. 

int main(void) {

int n=5, x=1;

vector<int> a{1, 2, 3, 4, 5};// 직접 초기화  

vector<int> b;// b는 빈 컨테이너

vector<int> c(n); // c는 기본값(0)으로 초기화된 n개의 원소를 갖은 벡터

vector<int> d(n, x); // d는 x값으로 초기화된 n개의 원소를 갖은 벡터

vector<int> e(a); // e는 a벡터를 복사한다. 

vector<int> v(a.begin()+1, a.end()-1); // v는 a의 1번 인덱스부터 3번 인덱스까지 복사

for(auto x : v) cout<<x<<" "; //2 3 4출력  

return 0; 

}

질문하신 내용은 저도 처음 보는 생성자 호출입니다. 

질문하신 코드가 있는 전체코드를 다시 올리면 분석해 보겠습니다.

그리고 vector<int> n[20]은 빈벡터 객체 20개를 만드는 것이고, vector<int> n(20)은 0으로 초기화된 크기가 20인 벡터 객체 하나를 만드는 것이니 구별해서 사용하시기 바랍니다.