在不构造容器的情况下对唯一元素进行迭代

Iterator over a unique element without construction a container

我有一个框架,它需要一个迭代器作为输入。 但有时,我只有一个元素,因此构建容器似乎工作量太大。

T obj; // my unique object

std::vector<T> vec; // I want to avoid this
vec.push_back(T);

// Because the only use of the container is for this call
call(std::begin(vec), std::end(vec));

// I want to do something like that
call(BeginFakeSingletonIt<T>(obj), EndFakeSingletonIt<T>());

我可以创建一种特殊类型的迭代器,但标准库或 boost 中不存在类似的东西吗?

可以将单个元素视为大小为 1 的数组。因此,如果我们使用它,那么指向对象的指针将是指向数组开头的指针(迭代器),而指向过去的指针则数组的结尾将只是该指针递增一次。所以你可以做的是使用

call(&object, &object + 1)

现在您将只处理单个对象。

虽然已经有了答案,但我建议另一种方法:只需在您的调用中添加另一个重载,它本身接受一个元素,并使您的迭代器版本在循环中调用单个元素函数。

这将使代码更直接,并且在非内联情况下具有更好优化代码的额外好处。