Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在不构造容器的情况下对唯一元素进行迭代器_C++_Boost_Iterator_Std - Fatal编程技术网

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)