将向量的迭代器发送到一个函数中.(C )

To send in iterators of vectors into a function. (C++)

本文关键字:一个 向量 函数 迭代器      更新时间:2023-10-16

这更像是一个后续问题是否可以将部分向量作为向量发送到函数?但这是不同的,我不能在那里问。

我包括在我的情况下有趣的特定答案:


使用迭代器作为基于范围的函数的参数,并传递到所需的范围。您在功能中的代码变为

funcwithrange(v.cbegin() 10,v.cbegin() 50);使用功能签名

void funcwithrange(std :: vector :: const_iterator first,std :: vector :: const_iterator last)可以通过将其作为矢量成员类型作为其模板参数的功能模板来推广,或者更远地转移到支持此类范围迭代的任何容器中。如评论中所述,有许多有关此模式的例子。

std ::距离(首先,最后);将返回所需的更改大小。我认为您不会在不制作实物副本的情况下更接近满足您的要求。


这一切都很好,但是我想知道如何使用"向量"(我的向量在新函数中称为"数字"。当我的程序外观现在外观时,我只是使用数字[i],数字[i 1]and numbers.size()。我不知道有两个参数时该怎么做。我想我可以先使用 ?或其他东西,但是既然它是递归功能向量。

我的第二个问题是,当我使用命名空间std时,如何编写功能签名?通常,我只是在::和::之前切断了所有内容


我很抱歉在这里询问它与已经回答的其他问题如此相似的情况。我首先试图将电子邮件发送给发布答案的人,他建议我将其发布在此处。

更新:

谢谢您的答案,我仍然看不到如何使用它。不是因为您的答案不好,而是因为我描述的不够好。也应该使用该函数附加代码:


bool deeperLook (vector<int> numbers, int target)
{
    for (int i = 0 ; i < numbers.size() ; i++)
    {
        if (numbers[i] == target)
        {
            return true;
        }
        if (numbers[i] < target)
        {
            deeperLook({numbers.cbegin() + i, numbers.cbegin() + numbers.size()} , target - numbers[i]);
        }
    while(numbers[i] == numbers[i+1])
    {
        i++;
    }
    }
    return false;
}

此函数将获得INT的分类向量(最大的第一),然后尝试创建添加在一起达到特定数字的数字的组合(目标)。BOOL更深层面(矢量号,INT目标)如您所见,该函数希望向量为Indata。该向量被发送到程序的另一部分,而且它是递归的,因此我需要将其发送为Indata的向量。我该如何使用迭代器进行操作?该代码正常运行,但记忆效率低下,因为它实际上只是同一向量的所有部分。

有人还说我应该避免使用"使用名称空间std";为什么?编写代码似乎容易得多。

您可以使用first[i]operator[]在随机访问迭代器上工作,您可以使用last - first来获取'size'。请记住,迭代器操作是基于指针的,因此,如果您可以使用指针进行操作,则可以使用随机访问迭代器进行操作。