簡體   English   中英

將向量的迭代器發送到函數中。 (C ++)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM