c++ - 填充字符串 vector

标签 c++ stl vector

<分区>

我正在尝试使用 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 中不再是一个问题。

关于c++ - 填充字符串 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13985290/

相关文章:

c++ - 使用 ostream_iterator 将映射复制到文件中

c++ - 如何修复 : binary = :no operator exists which takes a RHS of const & fullName

c++ - 删除期间的 CPP Vector 构造函数调用

r - 在 R 中列出多个向量上的唯一元素

c++ - "Unlimited"CEdit text without ES_AutoHScroll

c++ - 在 C++ 中,如何在没有循环的情况下用值 {1,1,1,...,1} 初始化 vector<int> v(1000)?

c++ - 二维数组及其在 C++ 中的性能

c++ - 为什么正确编译c++类构造函数后会发生运行时错误

c++ - 使用 accumulate 计算数组 double[] 平均值的函数

c++ - Openmp 和减少 std::vector?