显示RECT数组内的所有向量C ++

时间:2016-10-02 08:34:53

标签: c++ arrays loops pointers vector

这是关于这个主题的第三个问题,我没有在评论中提出新问题,而是认为开始一个新主题会更好。

完整的代码可以在这里找到: C++ CvSeq Accessing arrays that are stored

使用以下代码,我可以显示已添加到RECT数组的最新向量(请注意,这是放在for循环中):

    RECT& lastRect = detectBox->back();
    std::cout << "Left: " << lastRect.left << std::endl;
    std::cout << "Right: " << lastRect.right << std::endl;
    std::cout << "Top: " << lastRect.top << std::endl;
    std::cout << "Bottom: " << lastRect.bottom << std::endl;

我现在要做的是在for循环之外创建一个循环,它将显示 detectBox 中的所有向量。我无法确定数组中实际存在多少个向量,因此无法遍历向量。

我尝试使用以下内容:

int i = 0;
while ((*detectBox)[i].left!=NULL)
{
    std::cout << "Left: " << (*detectBox)[i].left << std::endl;
    std::cout << "Right: " << (*detectBox)[i].right << std::endl;
    std::cout << "Top: " << (*detectBox)[i].top << std::endl;
    std::cout << "Bottom: " << (*detectBox)[i].bottom << std::endl;
    i++;
}

并且还试过玩 sizeof(* detectBox),但只返回 32 的答案......

1 个答案:

答案 0 :(得分:1)

好的,你在这里使用了错误的术语。变量detectBox向量(或者更确切地说是指向它的向量的指针)。有三种方法可以迭代它(我稍后会再展示它们)。它不是一个数组,它不是一个向量数组。它是指向RECT结构向量的指针。

现在关于如何迭代向量。就像你迭代任何向量一样。

第一种方法是使用C方式,使用索引:

for (unsigned i = 0; i < detectBox->size(); ++i)
{
    RECT rect = detectBox->at(i);
    std::cout << "Left: " << rect.left << std::endl;
    ...
}

第二种方式是使用迭代器的传统C ++方式:

for (std::vector<RECT>::iterator i = detectBox->begin();
     i != detectBox->end();
     ++i)
{
    std::cout << "Left: " << i->left << std::endl;
    ...
}

最后一种方法是使用C ++ 11标准中引入的range for循环:

for (RECT const& rect : *detectBox)
{
    std::cout << "Left: " << rect.left << std::endl;
    ...
}

你尝试循环的条件(*detectBox)[i].left!=NULL的问题是成员变量left不是指针,当你越界时,你不能保证有一个& #34; NULL&#34;价值(相反,它将不确定并且看起来是随机的。)