我尝试使用默认的" fill"来填充字符串向量。 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 :(得分: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 :(得分:1)
主要问题是stv
不是一个你不需要new来分配动态的指针,可以修改如下:
std::vector< std::string > stv(10, x);
答案 2 :(得分:1)
您正在尝试将指向std :: vector的指针指定给std :: vector。
您可以直接使用std :: vector构造函数:
std::vector<std::string> stv(10, x);
或者您可以使用指向std :: vector的指针:
std::vector<std::string>* stv = new std::vector<std::string>(10, x)
祝你好运