我正在尝试编写一个C++函数,它接受一个OutputIterator并将值写入它,但是我遇到了各种各样的问题.当我传入一个列表<>迭代器时,列表没有被填充,当我传入一个向量<>迭代器时,我得到一个分段错误(在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());
}
Run Code Online (Sandbox Code Playgroud)
Tho*_*mas 10
您的代码中断了,因为列表和向量都没有足够的元素.请注意,输出迭代器不会添加元素,它只是写入现有元素.
因此,您可以按如下方式重写它:
template<typename Container>
void insertValues(Container &result)
{
for (int i = 0; i < 10; i++)
{
result.push_back(i);
}
}
Run Code Online (Sandbox Code Playgroud)
并在main:
insertValues(values_list);
insertValues(values_vector);
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用执行push_back操作的迭代器.这是在名称back_inserter(#include <iterator>)下的标准库中.使用它,而不是修改您的insertValues代码:
insertValues(back_inserter(values_list));
insertValues(back_inserter(values_vector));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1859 次 |
| 最近记录: |