2014-09-28 3 views
0

이것이 작동하는 방식을 이해하지 못합니다. 문자열 목록에서 문자열 배열을 만들려면 여기를 클릭하십시오. 목록의 문자열 수를 계산 한 다음이 문자열의 배열을 만들고 싶습니다. 나는 몇 가지 테스트를하고이 코드를 내놓았다되었습니다문자열 배열을 새로 만드는 방법

string *newOrder; 

int numNodes; 

numNodes = alphaTree.numNodes(); 

newOrder = new string [numNodes]; 

newOrder[0] = "This is"; 
newOrder[1] = "a test"; 
newOrder[2] = "To see"; 
newOrder[3] = "If this"; 
newOrder[4] = "will work"; 

결과는 vaule "이것은"을 갖는 단일 문자열 배열이 같은 newOrder는 역할을한다는 것이다. 내가 뭘 잘못하고 있니?

+1

는'표준 : vector'을 사용하십시오 볼 수 있습니다. 'new','new []','delete', delete []','~ T()','malloc' 또는'free'의 사용은 피해야합니다. 그것들을 호출하십시오 (예를 들어, 사용자 정의 스마트 포인터 또는 유형 보증 유니온을 작성할 때). – o11c

+0

너무 프로그래밍에 익숙하지 않습니다. 똑똑한 포인터 나 타입 세이프 조합이 무엇인지 모르겠지만 위에 나열한 코드를 사용하지 않은 이유를 알고 싶습니다. – user3600424

+1

스마트 포인터와 타입 안전 조합과 같은 고급 기능 만이 이러한 기능을 직접 호출해야합니다. 벡터를 사용하면 메모리 누수를 방지하고 버퍼 오버런을 방지 할 수 있습니다. –

답변

1

numNodes = alphaTree.numNodes();를 확인하십시오. 원하는 크기를 반환 중입니다.

다음은 올바른 코드이며 5 개의 문자열을 할당하고 할당합니다. 다음 문을 실행하면

newOrder = new string [5]; 
newOrder[0] = "This is"; 
newOrder[1] = "a test"; 
newOrder[2] = "To see"; 
newOrder[3] = "If this"; 
newOrder[4] = "will work"; 

:

cout << newOrder[2] << endl; 

이 인쇄됩니다 :

+0

그것은 5를 반환합니다. VS에서 디버거를 사용하면 모든 문자열이 할당 된 후 최종 결과를 볼 수 있으며 "This is"라고 표시됩니다. 지역 편지함에서 펼칠 때 각 문자 옆에 색인 번호가 있습니다. – user3600424

+0

아 맞습니다. newOrder는 가리키는 배열의 첫 번째 요소 만 표시하는 포인터이기 때문에 추측합니다. 감사! 내 자신을 혼란스럽게 ... 내 자신을 혼란스럽게 ... – user3600424

+0

@ user3600424 문제가 디버거 인 경우 프로그래밍 문제가 아니라 디버거 표시 문제라는 질문을 다시하십시오. 지금 당장 귀하의 질문은 프로그래밍 문제로 들립니다. – PaulMcKenzie

0
using std::string; 
using std::vector; 

// from an initializer_list 
vector<string> newOrder1 = { 
    "This is", 
    "a test", 
    "To see", 
    "If this", 
    "will work", 
}; 

// as a sequence of appends 
// often used in a loop if an iterator is not applicable 
vector<string> newOrder2; 
newOrder2.push_back("This is"); 
newOrder2.push_back("a test"); 
newOrder2.push_back("To see"); 
newOrder2.push_back("If this"); 
newOrder2.push_back("will work"); 

// from an iterator-pair over any standards-compliant container 
vector<string> newOrder3(alphaTree.begin(), alphaTree.end()); 
관련 문제