2010-06-04 3 views
1

점이 변경되지 않을 일련의 점이 있습니다. int의 Vector 또는 새로운 유형으로 나타내야합니까?점/위치를 나타내는 유형 또는 벡터

순간에 내 취향이 벡터로 이동하는 것입니다

:

doSomething(myVec[0], myVec[1]); 
doSomethingElse(myVec[2], myVec[3]); 

반대 :

doSomething(myType.getPos1(), myType.getPos2()); 
doSomethingElse(myType.getPos3(), myType.getPos4()); 

어떤 생각이나 아이디어?

감사합니다.

+0

은 '점 시리즈'수학 벡터 개념을 반영 하는가 (내 C++는, 올바른 구문되지 않을 수도 녹슨입니다)? – xtofl

+0

사실, 직위가 더 적절한 용어 일 것입니다. –

답변

2

stl을 사용 중이므로 vector< pair<int,int> > (또는 점이 정수가 아닌 경우 vector< pair<double,double> >)을 사용합니다. 그것은 포인트에 아주 좋습니다.

vector< pair<int,int> > points; 
points.push_back(make_pair(1,2)); 
points.push_back(make_pair(2,2)); 
+1

구조체 또는 더 나은 클래스를 선호합니다. 클래스를 사용하면 거리 계산 (즉, myPoint.DistanceTo (myOtherPoint);)에 메소드를 추가 할 수 있습니다. 쌍을 사용하는 것은 효과가있을 수 있지만 사용 된 정보, 저장되는 정보 및 유용 할 수있는 정보를 실제로 알려주지는 않습니다. – dbemerlin

+0

나는 당신의 주장을 따르지 않는다. 어떤 정보가 그 안에 저장되어 있는지 알려주는 것이 왜 이 아닌가? 내 말은, int의 쌍입니다. 얼마나 더 명확해야할까요? 당신은 실제로 두 아이디어의 사용을 결합 할 수 있습니다. 과 구조체를 만들고, 거리 계산을위한 다른 방법을 추가하십시오. – dcp

3

주어진 정보로 말하기가 어렵습니다. 그러나 지금까지 제공된 정보가 무엇이든 struct Pointxy 좌표로 쓰고 점 수를 vector으로 만드는 것이 좋습니다. 이렇게하면 표준 컨테이너에 객체를 저장할 때 얻을 수있는 이점을 얻을 수있을뿐 아니라 공통 구조로 데이터를 논리적으로 바인딩하므로 포인트를 원할 때마다 vec[0],vec[1] 번만 가질 필요가 없습니다. 당신이 getPos 방법으로 클래스를 작성하는 경우 보조 노트로서, 나는 확실히 getPos(int index)보다는 getPos1, getPos2을 작성 등

3

왜 실제 벡터 구조체/클래스를 생성하지?

벡터는 수학적 벡터를 의미합니다. 일반적으로 벡터는 점과 위치에 사용됩니다. 이것의 보너스는 코드가 훨씬 더 읽기 쉽다는 것입니다.

이것은 게임, 그래픽 및 기타 응용 프로그램에서 수행하는 방법입니다. 관련 데이터에 대한 목록을 사용하는 것은 OO가 아니며 OOP가 존재하는 이유 중 하나입니다.

+0

OO 여야합니까? STL은 OO가 아닙니다. –

+0

@Eddy 확실히 아니지만 OOP 개념을 OOP를 지원하는 언어로 속일 때 그 것이 문제입니다. – Finglas

1

당신이 대답은 분명하다 다음이를 반복해야하는 경우 :

그럼 당신이 뭔가를 할 수 있습니다.

변경되지 않아 복잡성을 관리 할 수 ​​있다면 첫 번째 옵션이 좋습니다. 두 번째는 더 읽기 쉽습니다 (좋은 이름을 선택하는 경우).

벡터에 대한 참조를 포함하거나 보유하는 클래스를 작성할 수도 있습니다. 이 경우 두 가지 이점을 모두 누릴 수 있습니다.

Boost.tuple 라이브러리를 사용할 수도 있습니다.

#include <boost/tuple/tuple.hpp> 

boost::tuple<int,int,int,int> position; 

과로 액세스 :

position.get<N>(); // where N is in 1,2,3,4 
3

이럴 최적의 솔루션은 다음과 같습니다

struct Point { 
    int x, y; 
}; 

[... 다른 곳에서 ...]

vector<Point> points(); 

+0

코드에서 이것이 더 명확해질 것이라고 생각합니다. 그런 다음 OP에 어떤 종류의 퍼포먼스가 필요한 경우 3D 또는 어떤 유형의 수학적 미적분인지 모릅니다. 핑글라스가 말했듯이 해결책이 있습니다. – Nikko

관련 문제