我正在尝试使用复制算法将指向字符串的共享指针插入到向量中。是否可以从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));
}
};
有人能告诉我可能出了什么问题吗?
谢谢!
std::copy
在这里不合适,因为您正在读取字符串,但试图存储指向字符串的指针。
源和目标类型不同,因此需要std::transform
。这个函数类似于copy,但它在将输入写入输出迭代器之前应用了一个函数来转换输入。
transform(istream_iterator<string>(cin), istream_iterator<string>(), back_inserter(data),
[](const string& str) { return make_shared<string>(str); });