2012-12-21 56 views
3

我想填充使用STL向量的默認「填充」構造函數的字符串向量。不過,我得到以下錯誤信息:填充字符串的向量

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

這裏是源代碼:

#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

'運營商新'返回一個指針,你不應該在這裏使用'new'。 –

回答

1

主要問題是,stv是不是你不需要新的分配動態指針它可以像這樣修復:

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*構建它會更有效率。這是你不會做同樣的原因:

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

那將造成兩個向量,然後從第二個所有10個元素複製到第一,然後丟棄第二個,很多史稿額外工作。由於移動語義,這在C++ 11中已經不是什麼問題了。

1

你正在試圖爲std :: vector分配一個指向std :: vector的指針。

您既可以直接使用的標準::矢量構造:

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

或者你可以使用一個指針到std ::向量:

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

好運