2013-04-02 129 views
0

我正在使用boost::algorithm::contains(std::vector<long>, long value)並接收到大量錯誤。boost :: algorithm :: contains std :: vector <long>&long value

std::vector<long> instance; 
long byteIndex; 
// (Perhaps more code?...) 
boost::algorithm::contains(instances, byteIndex); 

我不明白這個編譯器錯誤C2039: 'type' : is not a member of 'boost::range_const_iterator<C>'

我讀的模板類,看到使用std示範:: string的

std::string s = "Boris Schäling"; 
boost::algorithm::contains(s, "is"); 

我不認爲我使用升壓轉換器的中包含了除我使用的是不同類型的有什麼不同。任何想法爲什麼boost::algorithm::contains(std::vector<long>, long)不會編譯?

+1

請顯示導致此錯誤的代碼。 –

+0

'boost :: algorithm :: contains(std :: vector ,long)'是導致錯誤的代碼。一個試圖編譯的錯誤會引發一個額外的語句'參見函數模板實例化'bool boost :: algorithm :: contains ,long>(const Range1T&,const Range2T&)'being compiled' 。從模板的角度來看,我沒有看到我做錯了什麼。 – Mushy

+1

請實際顯示代碼,不要只描述它。 –

回答

1

boost::algorithm::contains需要兩個範圍,即要搜索的輸入範圍和範圍。由於您提供了第一個範圍(std::vector<long>),但不是第二個(您只給出一個long值),所以出現錯誤。

你會更好使用std::find

std::find(vector.begin(), vector.end(), value) != vector.end() 
+0

我不喜歡這個實現的std :: find,因爲它不會返回一個布爾,而是一個迭代器到找到的對象,並且會不必要地膨脹代碼。這就是爲什麼我想要'boost :: algorithm :: contains',因爲它最接近[Java中的Vector.contains]的等價性(http://docs.oracle.com/javase/6/docs/api/java /util/Vector.html#contains(java.lang.Object))我所需要做的就是'std :: vector (byteIndex)',並且比較會起作用。不是最優雅的,但把工作放下。 – Mushy

+0

該代碼只測試'value'是否*不是第一個元素*。 –

+0

@DrewDormann糾正是'std :: find(vector.begin(),vector.end(),value)!= vector.end()'? – Mushy

1

boost::algorithm::contains需要兩個範圍。您正在向量中搜索一個值。

在您的字符串示例中,您正在搜索序列"is"。如果您要搜索'i'(不是序列,值),您將得到與您在vector<long>中描述的相同的錯誤。

代碼:

std::vector<long> v { 1,2,3,4,5 }; 
std::vector<long> v1 { 3, 4 }; 
boost::algorithm::contains(v, v1); 

編譯就好了。

相關問題