如何将双端队列>>向量>>字节迭代到函数

时间:2019-09-11 00:08:59

标签: c++ vector iterator deque

我需要能够调用一个寻找复杂数据结构(伪代码)的迭代器的函数vector :: deque :: vector(uint8_t):: iterator。我需要能够使用deque :: vector(uint8_t);来调用它。我不知道如何“迭代”它。

在下面的代码段中,我尝试使用someMoreBytes双端队列结构调用MyFunkyFunc函数。

#include <cstdlib>
#include <vector>
#include <deque>
#include "stdint.h"

using namespace std;

void MyFunkyFunc(std::vector<std::deque<std::vector<uint8_t>>>::iterator itsIt)
{

}

int
main(int argc, char** argv)
{
    std::vector<std::deque<std::vector < uint8_t>>> bunchaBytes;
    std::deque<std::vector<uint8_t>> someMoreBytes;

    //... Put at least one element in bunchaBytes

    MyFunkyFunc(bunchaBytes.begin());
    MyFunkyFunc(someMoreBytes); // Problem is here

    return 0;
}

这个代码存根已经很接近我了。我无法对MyFunkyFunc函数进行任何修改,因为它在我必须链接的库中。提前非常感谢

1 个答案:

答案 0 :(得分:2)

如果我们假设MyFunkyFunc被正确地实现为接受迭代器参数的模板:

template <typename I>
void MyFunkyFunc (I itsIt) {
    //...
}

然后,您可以只传递someMoreBytes的地址,因为向量的迭代器的行为与向量元素的地址相同。

MyFunkyFunc(&someMoreBytes);

否则,您将需要将someMoreBytes重新定义为单个元素vector,并像使用begin()一样传递bunchaBytes