我想測試一個非空向量是否包含相同的元素。這是最好的方法嗎?測試一個向量的所有元素是否相等
count(vecSamples.begin()+1, vecSamples.end(), vecSamples.front()) == vecSamples.size()-1;
我想測試一個非空向量是否包含相同的元素。這是最好的方法嗎?測試一個向量的所有元素是否相等
count(vecSamples.begin()+1, vecSamples.end(), vecSamples.front()) == vecSamples.size()-1;
作爲@約翰正確地指出,你的溶液迭代即使前兩個元素是不同的,這是相當浪費整個容器。
純粹不增強沒有C++ 11需要的解決方案如何?
bool allAreEqual =
find_if(vecSamples.begin() + 1,
vecSamples.end(),
bind1st(not_equal_to<int>(), vecSamples.front())) == vecSamples.end();
停止找到第一個不相等的元素。 只要確保你的vecSamples在運行之前是非空的。
接受,因爲我現在只使用舊的C++。 – 2013-03-21 11:33:18
或許不會,因爲它總是檢查向量的所有元素,即使前兩個元素是不同的。就我個人而言,我只是寫一個for循環。
在C++ 11(或Boost Algorithm)
std::all_of(vecSamples.begin()+1,vecSamples.end(),
[&](const T & r) {return r==vecSamples.front();})
我會將第一個元素的值減去所有向量元素,然後計算它們的總和並將其與零比較。
如果矢量不包含數字會怎麼樣?如果輸入矢量是隻讀的呢? (我不得不復制它) – 2015-07-14 20:54:59
如果您的載體至少包含一個元素:
std::equal(vecSamples.begin() + 1, vecSamples.end(), vecSamples.begin())
它是簡單的,肯定的,但是效率不高,如果它們是不同的。另外你可以通過去掉+/- 1來進一步簡化它。特別是因爲這會炸燬空載體。 – 2013-03-20 18:00:41
'vecSamples.front()'會在空載體上爆炸。 – john 2013-03-20 18:01:21
在我的情況下,矢量永遠不會是空的。 – 2013-03-20 18:03:37