我需要能够调用一个寻找复杂数据结构(伪代码)的迭代器的函数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函数进行任何修改,因为它在我必须链接的库中。提前非常感谢
答案 0 :(得分:2)
如果我们假设MyFunkyFunc
被正确地实现为接受迭代器参数的模板:
template <typename I>
void MyFunkyFunc (I itsIt) {
//...
}
然后,您可以只传递someMoreBytes
的地址,因为向量的迭代器的行为与向量元素的地址相同。
MyFunkyFunc(&someMoreBytes);
否则,您将需要将someMoreBytes
重新定义为单个元素vector
,并像使用begin()
一样传递bunchaBytes
。