我想在C++数组和裸指针中使用迭代器。 对于静态向量,我可以这样做:
#define SIZE 10
int vect[SIZE] = {0};
vect[3] = 5;
int* p = std::find(std::begin(vect), std::end(vect), 5);
bool success = p != std::end(vect);
如何使用原始指针(可能是堆分配的矢量)来实现它呢?当然,编译器不知道数据的大小,所以这段代码
int* pStart = vect;
std::find(std::begin(pStart), std::end(pStart), 5);
提供
error C2784: '_Ty *std::begin(_Ty (&)[_Size])' :
could not deduce template argument for '_Ty (&)[_Size]' from 'int *'
是否可以使begin()
和end()
意识到它们之间的元素?
std::array
代替,它具有C数组的所有功能,但实际上具有STL接口。而且它的迭代器被实现为指针。 - rlbond