我正在尝试编写一个C++函数,它接受一个OutputIterator并向其写入值,但我遇到了各种问题。当我传递一个list<>迭代器时,列表没有填充,当我传递一个vector<>迭代器时,在Linux上会出现分段错误。我遵循了从"通过传递输出迭代器从函数中填充std :: [容器]的讨论"和"如何编写以通用方式接受迭代器或集合的函数?"中得到的建议。有什么想法吗?我想使用输出容器的begin()调用insertValues()代码,就像我使用其他STL函数(如std:copy())一样。
#include <cstdio>
#include <list>
#include <vector>
using namespace std;
template<typename OutputIterator>
void insertValues(OutputIterator result)
{
for (int i = 0; i < 10; i++)
{
*(result++) = i;
}
}
int main(int argc, char **argv)
{
// This code produces 0 items in the list.
list<int> values_list;
insertValues(values_list.begin());
printf("values has %d items\n", (int) values_list.size());
// This code produces a seg fault.
vector<int> values_vector;
insertValues(values_vector.begin());
printf("values has %d items\n", (int) values_vector.size());
}