2013-05-11 2 views
3

저는 C++을 배우고 있습니다. 내 주요 언어는 Free Pascal입니다. FP에서 나는 이것을 할 수있다 :파스칼의 레코드 배열에 대한 C++ 아날로그

type 
    TSomeType = (Foo1, Foo2, Foo3); 

    TSomeRecord = record 
    Field1: String; 
    Field2: String; 
    end; 

var 
    MyArray: array[TSomeType] of TSomeRecord; 

그래서 배열의 길이는 3이다. 그렇다면 이것을 사용할 수 있습니다 : MyArray[Foo2].Field1 := 'Some string' C++에서 비슷한 것을 할 수 있습니까? 배열 튜토리얼 ++ C의 솔루션을 찾을 수 없습니다

감사

+0

내가 FP를 모르겠어요,하지만 나에게 연관 배열처럼 보인다 . 그렇다면'std :: map'을보십시오. –

+0

C에서'record'와 regular 배열에 대해'struct'를 사용할 수 있습니다. C++에서도 사용할 수 있지만 C++에서는 대신 객체를 사용해야합니다 (FP에도 객체가 있어야 함). –

+0

@ImreL : C++의'struct'와'class'의 유일한 차이점은 멤버와 상속의 기본 가시성입니다. –

답변

2

등가 같은 것을 보일 것 C++ 코드 :

enum { Foo1, Foo2, Foo3, N }; 

struct SomeRecord 
{ 
    string Field1; 
    string Field2; 
} 

SomeRecord array[N]; 

array[Foo2].Field1 = "Some String"; 
+1

이것은 가장 직접적인 표현이지만, C++에서는 C 스타일 배열보다는'벡터 '을 사용하는 것이 더 일반적입니다. 벡터는 대부분 배열처럼 동작하지만 더 많거나 적은 수의 항목을 포함하도록 확장/축소 할 수 있습니다. C++ 11의 이동 의미와 결합하면, "복사"하는 것이 놀랄만큼 효율적일 수 있습니다. 가능한 경우 배열 복사가 필요한 것처럼 보이는 작업은 장면 뒤에서 포인터를 사용하여 구현됩니다. 이로 인해 벡터 값을 함수간에 전달/반환하는 것이 훨씬 쉬워집니다. – Steve314

+0

감사합니다. 이것은 내가 필요한 것입니다! – Dibo