填充字符串向量

时间:2012-12-21 06:26:04

标签: c++ stl vector

我尝试使用默认的" 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;
}

3 个答案:

答案 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)
祝你好运