gpt4 book ai didi

c++ - 在 C++ 中使用 back_insert_iterator

转载 作者:搜寻专家 更新时间:2023-10-31 00:17:48 28 4
gpt4 key购买 nike

我正在尝试开始使用 C++,应该实现以下功能:

std::istream& readResults(std::istream& is, std::back_insert_iterator<std::vector<Result>> insertIt)

该函数从 istream 中读取“studentId grade”形式的行,并应使用 insertIt 将它们添加到 vector 类型。

结果是一个结构:

struct Result
{
std::string studentId;
size_t grade;
};

你能告诉我如何开始吗?

我试过这样的:

std::string studentId;
size_t grade;
Result new_result;

while(is >> studentId >> grade) {
Result new_result = {studentId, grade};
copy(new_result, *insertIt);
}

最佳答案

你不想实现这个功能

std::istream& readResults(
std::istream& is,
std::back_insert_iterator<std::vector<Result>> insertIt)

你要做的是实现模板函数

template<class InsertIterator>
std::istream& readResults(std::istream& is, InsertIterator insertIt)

当您传递 std::back_inserter(vec) 时,模板将自动实例化为正确的类型。

这个函数的代码本质上是

template<class InsertIterator>
std::istream& readResults(std::istream& is, InsertIterator insertIt) {
std::string studentId;
size_t grade;
while (is >> studentId >> grade) {
Result new_result = {studentId, grade};
*(insertIt++) = new_result;
}
}

std::copy 从一个iterator 复制到另一个。但是您不是从迭代器复制。您一次插入一个元素,并通过取消引用迭代器来完成此操作,就好像它是一个指针,然后在完成后递增它。

关于c++ - 在 C++ 中使用 back_insert_iterator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12556341/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com