2009-07-16 4 views
1

플로트 [6] 유형이고 baseForce 및 basePos가 벡터 유형 인C++ 벡터 조작 최적화

을 복사하여 붙여 넣기 만하고 SlaveForce 및 SlavePos를 올바르게 사용해야하는 것을 피하기 위해 아래의 코드를 최적화하려고합니다.
typedef struct _NodeCoord 
{ 
    float coords[6]; 
} NodeCoord; 

int main() 
{ 
    ... 
    memcpy(tempNodeCoord.coords, SlaveForce, 6*sizeof(float)); 
    baseForce.push_back(tempNodeCoord); 
    memcpy(tempNodeCoord.coords, SlavePos, 6*sizeof(float)); 
    basePos.push_back(tempNodeCoord); 
    ... 
} 

일부 테스트 코드를 시도했습니다. 이것이 내가 달성하고 싶은의 라인을 따라하는 동안

std::vector<NodeCoord> tallon; 
NodeCoord m; 
memset(m.coords, 0, sizeof(m.coords)); 
tallon.push_back(m); 

,하지만 작동하지 않습니다 : 만이 작동하는 것처럼

std::vector<float[6]> ed; 
float e[6]; 
tallon.push_back(e); 

나는 또한 "이 떠 타입 정의 작성 시도 [6 ] 내 취향;" main 함수 앞에 줄이 있지만 잘 작동하지 않습니다. memcpy 함수 호출을 없애기 위해 할 수있는 일이 있습니까 (아니면 float [6] 변수를 직접 push_back하는 것입니까?)? 미리 감사드립니다.

답변

1

벡터에 저장하려면 형식을 복사하고 할당 할 수 있어야하며 C 스타일 배열도 복사 할 수 없으며 할당 할 수 있어야합니다. 대신 다른 벡터를 사용하거나 배열에서 구조체를 래핑해야합니다.

+0

다른 벡터를 사용하고 구조체에서 배열을 래핑하는 것의 차이점은 무엇입니까 (이것이 내가 이미하고있는 것입니다)? – stanigator

+0

래핑 된 배열은 아마도 빠르지 만 융통성이 떨어집니다. 예를 들어 배열에 실제로 얼마나 많은 것이 있는지 찾을 수 없습니다. –

+0

sizeof (array)/sizeof (element)를 사용하여 배열에 몇 개의 요소가 있는지 확인할 수 없습니까? – stanigator

2

벡터의 벡터 시도 : I는 0.0f를 값 6 개 요소 플로트 임시 벡터를 밀어있어이 경우

std::vector<std::vector<float> > ed; 

ed.push_back(std::vector<float>(6, 0.0f)); 

단계;

Info on vector's constructors.

2

이것은 C++입니다. 클래스를 사용해 보시지 않겠습니까?

class NodeCoord { 
public: 
    float coords[6]; 
    NodeCoord() {memset(coords, 0, sizeof(coords));}; 
    ~NodeCoord() {}; 
}; 

std::vector<NodeCoord> tallon; 
tallon.push_back(NodeCoord()); 

cout << tallon.front().coords[0]; 

그리고 선택하면 수업을 더 많이 할 수 있습니다. 복사본을 피하려면 복사 생성자에서 클래스의 얕은 복사본을 만듭니다.