2012-12-21 5 views
3

STL 벡터의 기본 "채우기"생성자를 사용하여 문자열 벡터를 채우려고합니다. 그러나, 나는 아래의 오류 메시지를 받고 있어요 :문자열 벡터 채우기

#include <vector> 
#include <string> 
#include <iostream> 

using namespace std; 

int main() 
{ 
    string x = "abcd"; 
    vector<string> stv = new vector<string> (10, x); 
    for (int i = 0; i < stv.size(); i++) { 
     cout << stv[i] << endl; 
    } 
    return 0; 
} 
+0

'연산자 새로운

std::vector<std::string>* stv = new std::vector<std::string>(10, x) 

행운을 빕니다 '는 포인터를 반환하고, 처음에는'new'를 사용해서는 안됩니다. –

답변

1

홈페이지 문제가 stv가 동적 할당 할 새에 필요하지 않은 포인터가되지 않는 것입니다 : 여기

10:55: error: conversion from ‘std::vector<std::basic_string<char> >*’ to non-scalar type ‘std::vector<std::basic_string<char> >’ requested 

소스 코드입니다 다음과 같이 수정 될 수 있습니다.

std::vector<std::string> stv(10, x); 
+0

'std :: vector stv (10, x); ' –

+0

@EdS. 좋은 지적, 고마워. – billz

3

불필요하게 new을 사용하고있는 것이 문제입니다. 정말로 당신은 할당 대신 직접 생성자를 사용해야합니다.

std::vector<std::string> stv(10, x); 

당신이이 방법, 당신은이 작업을 수행해야합니다 :

std::vector<std::string> *stv = new std::vector<std::string>(10, x); 

for (int i = 0; i < stv->size(); i++) { 
    cout << (*stv)[i] << endl; 
} 

또한, 오히려 string x = "abcd";하는 것보다, string x("abcd");을한다. 첫 번째는 기본 생성자를 사용하여 빈 문자열 객체를 만든 다음 operator=을 호출하여 문자열 내용을 설정하는 반면 두 번째 객체는 생성자를 사용하여 char*에서 생성자를 사용하는 것이 더 효율적입니다. 이것은 당신이이 작업을 수행 할 것 같은 이유입니다 : 두 벡터를 만든 다음 첫 번째로 두 번째에서 10 개 개의 요소를 복사 한 다음 두 번째를 버리고, 여분의 많은 duing 것

std::vector<std::string> stv = std::vector<std::string>(10, x); 

작업. 이것은 이제 C++ 11에서 동작 의미로 인한 문제가 적습니다.

1

std :: vector에 대한 포인터를 std :: vector에 할당하려고합니다.

당신은 직접 표준 : : 벡터 생성자 사용할 수 있습니다 중 하나

std::vector<std::string> stv(10, x); 

을 아니면 수 std :: 벡터 포인터를 사용할 수 있습니다

관련 문제