2011-06-12 4 views
8

C++에 List<>과 같은 것이 있습니까? 문자열 배열을 저장하기 위해 List<string>과 같은 것입니다.C++에 List <string>과 같은 것이 있나요?

+0

"제네릭"은 일반적으로 C++에서 "템플릿"이라고합니다. 표준 템플릿 라이브러리는 필요하다면 목록 이외에도 많은 컨테이너를 제공합니다. –

+0

@ Jeff : 아니요,'std :: list'. – Nawaz

+0

'std :: list '이 있습니다 만,'std :: vector'를 사용하거나 정적'std :: array' 인 경우 –

답변

19

대답은

std::vector<std::string> 

std::list 링크 된리스트, C#의 클래스 List<T> 좋아하지 배열 인 사실이다.

예.

#include <iostream> // iostream is for cout and endl; not necessary just to use vector or string 
#include <vector> 
#include <string> 
using namespace std; 

int main() 
{ 
    vector<string> list; 
    list.push_back("foo"); 
    list.push_back("bar"); 
    for(vector<string>::const_iterator it = list.begin(); it != list.end(); ++it) 
     cout << *it << endl; 

    return 0; 
} 

std::list 클래스는 실제로 C#의 LinkedList<T> 클래스와 동일하다.

+0

벡터가 비교 대상이 아니므로 어떤 헤더를 사용해야합니까? – Ata

+0

@Ata :'#include '? – Xeo

+0

'#include '과'#include '('std :: string'을 위해)이 필요합니다. 또한 C++ 파일의 맨 위에'using namespace std; '를하지 않는 한 타입을 명시 적으로'std :: vector '으로 한정 할 필요가 있습니다. – Sven

7

.NET의 목록은 연결된 목록이 아닙니다. 당신이 찾고있는 데이터 구조는 resizeable 배열입니다.

std::vector<std::string> list; 
0

C++의 std::vector은 C#의 List에 해당하는 템플릿 클래스입니다. 또한 std::list 템플릿은 C# SingleLinkedList에 해당합니다.

C++에서 vectorlist 항목의 호출 복사 생성자를 준비해야합니다. 따라서 각 문자열에 대해 사본이 만들어집니다.

메모리가 제한되어 있거나 동일한 문자열을 여러 모음에 저장하려는 경우 대신 std::vector<std::string*> 또는 std::vector<char*>을 사용하는 것이 좋습니다.

+0

'std :: list'는 단독 링크리스트가 아닌 이중 링크리스트입니다. – Xeo

+0

물론 그렇지만 BCL에는 이중 링크 목록이 없으며 STL에는 단일 연결 목록이 없습니다. 내가 말한 의미는 기존 클래스가 삽입/삭제 시간 보장 측면에서 유사하다는 것입니다. 수정 해줘서 고마워. –

+2

본질적으로 예외 안전이 아니므로 포인터 컨테이너를 사용하는 것은 좋지 않습니다. 대부분의 경우, 그러한 일은 필요하지 않으며, 그러한 일이 필요한 곳에서는 거의 항상 더 나은 해결책이 있습니다. –

관련 문제