<分区>
我正在尝试使用 STL vector 的默认“填充”构造函数来填充字符串 vector 。但是,我收到以下错误消息:
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;
}
问题是您不必要地使用了 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);
这将创建两个 vector ,然后将第二个 vector 中的所有 10 个元素复制到第一个 vector 中,然后丢弃第二个 vector ,这需要大量额外工作。不过,由于移动语义,这在 C++11 中不再是一个问题。