传递"非const引用到迭代器"一个功能

时间:2016-01-11 11:42:29

标签: templates c++11 vector iterator

我有一个结构

typedef struct MyStruct
{
    double x, y, z;
}MyStruct;

我有一个功能

template <class Iterator>
bool
SomeFunc    ( 
                Iterator&        anotherVecBegin
            )
{
...
}

这就是我调用函数的方式。

std::vector<MyStruct> mySt;
SomeFunc(mySt.begin());

我收到错误invalid initialization of non-const reference of type..

这对我来说似乎很明显,因为参数将一直存在于函数的生命周期中。

如果我使参考不变,整个目的将被杀死,因为我无法在向量中插入值

我尝试过但失败了:

template <class Iterator>
bool
SomeFunc    ( 
                const Iterator&        anotherVecBegin
            )
{
     MyStruct pt1;
     pt1.x = 10, pt1.y = 20, pt3.z = 30;
    *(anotherVecBegin)++ = pt1;
}

这对我也有意义。

但我正在寻找一种方法:

  1. 在迭代器传递对某个函数的引用时,在函数内部使用迭代器插入元素
  2. pl建议

1 个答案:

答案 0 :(得分:3)

我解决了这个问题。我不需要引用迭代器。

相反,我只使用了back_inserter

从callee方法,我做:

std::vector<MyStruct> mySt;
SomeFunc(std::back_inserter(mySt));
std::cout << "Struct size after insert: " << mySt.size() << std::endl;

然后功能变为:

template <class BackInsertIterator>
bool
SomeFunc    ( 
                const BackInsertIterator        anotherVecBegin
            )
{
     MyStruct pt1;
     pt1.x = 10, pt1.y = 20, pt3.z = 30;
    *(anotherVecBegin)++ = pt1;
    // ... remaining code
}