C++ 在不构造容器的情况下对唯一元素进行迭代器
我有一个框架,它需要一个迭代器作为输入。 但有时,我只有一个元素,所以构建一个容器似乎太多了C++ 在不构造容器的情况下对唯一元素进行迭代器,c++,boost,iterator,std,C++,Boost,Iterator,Std,我有一个框架,它需要一个迭代器作为输入。 但有时,我只有一个元素,所以构建一个容器似乎太多了 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
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>());
T obj;//我唯一的目标
std::vector vec;//我想避免这种情况
向量推回(T);
//因为容器的唯一用途是用于此调用
调用(std::begin(vec),std::end(vec));
//我想做那样的事
调用(BeginFakeSingletonIt(obj),EndFakeSingletonIt());
我可以创建一种特殊类型的迭代器,但在标准库或boost中不存在类似的东西吗?单个元素可以被认为是大小为1的数组。因此,如果我们使用它,那么指向对象的指针将是指向数组开始的指针(迭代器),而指向一个过去的指针,那么数组结束的指针将只是递增一次的指针。所以你能做的就是使用
call(&object, &object + 1)
现在您将只处理单个对象。虽然已经有了答案,但我建议另一种方法:只需在调用中添加另一个重载,它接受元素本身,并使迭代器版本在循环中调用单个元素函数
这将使代码更加直观,并在非内联情况下具有更好的优化代码的附加好处。Quick hack:
call(&obj,&obj+1)代码>@nwp:不是黑客,完全合法。如果你能把你的代码重写成tobj[1]
,然后您也可以使用std::begin(obj)、std::end(obj)
。