[英]To send in iterators of vectors into a function. (C++)
這更像是一個后續問題, 是否可以將向量的一部分作為向量發送給函數? 但這是不同的,我不能在那里問。
我提供了針對我的情況的有趣的具體答案:
將迭代器用作基於范圍的函數的參數,並傳遞所需的范圍。 您在函數中的代碼變為
funcWithRange(v.cbegin()+ 10,v.cbegin()+ 50); 具有功能簽名
void funcWithRange(std :: vector :: const_iterator首先,std :: vector :: const_iterator最后)可以通過將其設為具有矢量成員類型作為其模板參數的函數模板,或者進一步擴展到支持該類型的任何容器,來推廣這一點。范圍迭代。 如評論中所述,有很多這種模式的例子。
std :: distance(first,last); 將返回所需的更改大小。 我認為您不進行物理復制就無法滿足您的要求。
一切都很好,但我想知道如何“使用”向量(在新函數中,我的向量稱為“數字”。從我的程序看,現在我只使用數字[i],數字[i + 1]和數字。 size()。當我有兩個in參數時,我不知道該怎么做,我想我可以使用first +?之類的東西,但是由於它是一個遞歸函數,我希望能夠將其視為向量。
我的第二個問題是使用命名空間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 deeperLook(向量數字,int目標)如您所見,該函數希望將向量作為indata。 該向量被發送到程序的另一部分,並且它是遞歸的,因此我需要將其作為數據輸入。 我該如何使用迭代器? 該代碼可以正常工作,但是創建所有thoose的內存效率很低,因為它實際上只是同一向量的所有部分。
有人還說我應該避免“使用命名空間std;”。 為什么? 用它編寫代碼似乎容易得多。
您可以使用first[i]
, operator[]
在隨機訪問迭代器上工作,也可以使用last - first
獲得“大小”。 請記住,迭代器操作是基於指針的,因此,如果可以使用指針進行操作,則可以使用隨機訪問迭代器進行操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.