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;
}
4

3 回答 3

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 中不再是一个问题。

于 2012-12-21T06:29:47.797 回答
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)

祝你好运

于 2012-12-21T06:31:38.410 回答
1

主要问题是这stv不是一个指针,您不需要 new 来分配动态它,可以像这样修复:

std::vector< std::string > stv(10, x);
于 2012-12-21T06:27:35.520 回答