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

时间:2015-02-18 19:21:09

标签: c++ stl iterator shared-ptr

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

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

谁能告诉我可能出现的问题?

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

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