2014-10-10 4 views
1

C++ 초기화에 대한 질문이 있습니다.C++ String Vector 초기화

자바에서

: 나는 빈 StringBuffer를 원하는 경우, 나는 빈 문자열 버퍼를 초기화

StringBuffer sb = new StringBuffer(); 

를 사용해야합니다.

++ C에서

: 나는 빈 문자열을 사용하려면, 난 그냥 내가 항상 두 번째 양식과 같이 작성해야 실제 프로젝트에서

std::string str; 

또는 std::string str = "";

를 선언 할 수 있습니까?

빈 벡터를 선언하는 것은 어떻습니까?

vector<int> vec; 

괜찮습니까? 또는이 vec에 일부 null 값을 제공해야합니까?

+0

이것은 개방형 질문이므로 programmers.stackexchange.com에서 더 좋습니다. 즉, 일반적으로 사용할 수있는 벡터는 괜찮 았고, 멤버를 추가하고 나머지를 처리하게하려면 push_back과 같은 멤버 함수를 사용하십시오. 문자열에 관해서는 빈 문자열에 추가하려고하면 가독성을 위해 명시 적으로 지정하지만 그렇지 않으면 실제로 필요하지 않습니다. – IllusiveBrian

+0

답장을 보내 주셔서 대단히 감사합니다. 제가 이것에 대해 질문 한 이유는 몇 달 전에 인터뷰했을 때 인터뷰 담당자가 빈 벡터를 초기화하지 않은 이유에 대해 묻기 때문에 C++에서 초기화하는 방법에 대해 궁금합니다. – user2840454

+0

'벡터 * vec = new vector ()'과 혼동하지 마십시오. Java 예제와 다소 유사합니다. 여기서 포인터는 할당 된 ("새로 추가 된") 벡터의 위치로 초기화합니다. 'vector vec; 만 쓰면 자동으로 일어나는 스택 할당입니다. – leemes

답변

4

표준 : 문자열과 표준 : 벡터 클래스, 기본없는 유형은 : 그 말은 그 정수 달리하는 선언 순간, 문자열에서 의사 난수 값과 벡터에는 잘 정의 된 초기 값이 있습니다.

std :: string의 기본값은 ""입니다.

std :: vector의 기본 내용은 {}입니다.

원하는 것을 사용할 수는 있지만 초기화가 필요하지 않으며 매우 좋지도 않습니다.

+0

고마워요! C++ 기본 유형이 0 인 값을 원하면 항상 값을 지정해야합니까? http : //msdn.microsoft.com/en-us/library/cc953fe1.aspx – user2840454

+0

예, 항상 초기화해야합니다 그렇게하지 않는 좋은 이유가없는 한. – leemes

+0

@leemes : 그 이유는 무엇입니까? ""문자열을 초기화하는 이유는 무엇입니까? –

1
  1. std :: string str (""); 직접 초기화를 수행하고 string (const char *) 생성자를 사용합니다.

  2. std :: string str = ""; 복사 초기화를 수행합니다.

  3. std :: string str; 빈 문자열을 만듭니다.

옵션 3은 다른 것과 비슷하며 오버 헤드가 적습니다. 그것은 여기에서의 차이에 대해 자세히 알아보기 사용 What's the motivation behind having copy and direct initialization behave differently?

+0

그래서 옵션 3을 사용하면 프로젝트에서이 옵션을 사용할 수 있습니까? – user2840454

+0

예, 최선의 선택입니다. –