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