gpt4 book ai didi

c++ - 将 vector 的迭代器发送到函数中。 (C++)

转载 作者:行者123 更新时间:2023-12-02 10:23:50 25 4
gpt4 key购买 nike

这更像是一个后续问题
Is it possible to send part of vector as a vector to a function?
但这是不同的,我不能在那里问。

我提供了针对我的情况的有趣的具体答案:

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

funcWithRange(v.cbegin()+ 10,v.cbegin()+ 50);
具有功能签名

无效funcWithRange(std::vector::const_iterator首先,std::vector::const_iterator最后)
可以通过将其设为具有 vector 成员类型作为其模板参数的功能模板,或者进一步扩展到支持这种范围迭代的任何容器,来概括这一点。如评论中所述,有很多这种模式的例子。

std::distance(first,last);将返回所需的更改大小。我认为您无需进行物理复制就可以更接近满足您的要求。

一切都很好,但我想知道如何“使用” vector (在新函数中,我的 vector 称为“数字”。从我的程序看,现在我只使用数字[i],数字[i + 1]和数字。 size()。当我有两个in参数时,我不知道该怎么做,我想我可以使用first +?之类的东西,但是由于它是一个递归函数,我希望能够将其视为 vector 。

我的第二个问题是使用命名空间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 vector (首先是最大的),然后尝试创建相加在一起的数字的组合以达到特定的数字(目标)。
bool deeperLook( vector 数字,int目标)
如您所见,该函数需要一个 vector 作为indata。该 vector 将被发送到程序的另一部分,并且它是递归的,因此我需要将其作为数据输入。我该如何使用迭代器?该代码可以正常工作,但是创建所有thoose的内存效率很低,因为它实际上只是同一 vector 的所有部分。

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

最佳答案

您可以使用first[i]operator[]适用于随机访问迭代器,并且可以使用last - first来获取“大小”。请记住,迭代器操作基于指针,因此,如果可以使用指针进行操作,则可以使用随机访问迭代器进行操作。

关于c++ - 将 vector 的迭代器发送到函数中。 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55038776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com