簡體   English   中英

如何檢查向量中是否包含值? C ++

[英]How do I check if a value is contained in a vector? C++

我有一個向量,我試圖對其執行包含功能。 我收到某種類型的轉換錯誤,無法解決。 我也想知道我在做什么是否是檢查向量是否包含值的適當方法。

這是代碼:

#include "stdafx.h"
#include <vector>

static void someFunc(double** Y, int length);
static bool contains(double value, std::vector<double> vec);

int main()
{
    double doubleArray[] = { 1, 2, 3, 4, 5 };
    double *pDoubleArray = doubleArray;
    int size = sizeof doubleArray / sizeof doubleArray[0];

    someFunc(&pDoubleArray, size);

    return 0;
}
static void someFunc(double** Y, int length)
{   
    std::vector<double> vec();

    for(int i = 0; i < 10; i++)
    {
        //error: 'contains' : cannot convert parameter 2 from 'std::vector<_Ty> (__cdecl *)(void)' to 'std::vector<_Ty>'
        if(contains(*(Y[i]), vec)) 
        {
            //do something
        }
    }

}
static bool contains(double value, std::vector<double> vec)
{
    for(int i = 0; i < vec.size(); i++)
    {
        if(vec[i] == value)
        {
            return true;
        }
    }

    return false;
}

當使用默認構造函數聲明變量時,不要在其后放置() (盡管使用new在免費存儲區上分配空間時它是可選的)。 所以這行:

std::vector<double> vec();

應該成為

std::vector<double> vec;

如果您照原樣進行操作,它會認為該行是名為vec的函數的函數原型,該函數不帶任何參數並返回std::vector<double> ,這就是為什么會出現編譯器錯誤的原因。

是的,您用於查找項目的代碼將起作用(這稱為線性搜索)。 另外,如果您願意,可以使用std::find

if (std::find(vec.begin(), vec.end(), value) != vec.end())
    // found value in vec

如果向量按排序順序排列,則還可以使用binary_search ,它比find快得多,並且用法相同, 只是 binary_search返回的是bool而不是迭代器(因此無需針對vec.end() )。 如果使用其中任何一個,請確保包括algorithm標頭。

std::vector<double> vec();

奇怪的是,這聲明vector使用默認構造函數。 這聲明了一個不帶參數且返回vector的函數。 嘗試以下方法:

std::vector<double> vec;

您可以使用std :: find檢查STL數據結構是否包含某個值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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