将指向字符串的共享指针从 cin 插入 vector

Inserting shared pointers to strings from cin into vector

我正在尝试使用复制算法将指向字符串的共享指针插入向量中。是否可以使用复制算法从 istream 中读取行并将 shared_ptr 存储到向量中的那些字符串?到目前为止,我坚持以下 class。

class DVector
{
    typedef vector<shared_ptr<string>> PTSVector;
    PTSVector data;

public:
    void push_back()
    {
        copy(istream_iterator<string>(cin),
            istream_iterator<string>(),
            back_inserter(data));
    }
};

谁能告诉我哪里出了问题?

谢谢!

std::copy 在这里不合适,因为您正在读取字符串,但试图存储指向字符串的指针。

您的来源和目标类型不同,因此您需要 std::transform。此函数类似于复制,但它在将输入写入输出迭代器之前应用一个函数来转换输入。

transform(istream_iterator<string>(cin), istream_iterator<string>(), back_inserter(data), 
    [](const string& str) { return make_shared<string>(str); });