2009-07-16 63 views
13

我有布爾人的矢量。我需要將其元素從第n個到第m個設置爲true。有沒有一個優雅的方式來做到這一點,而不使用循環?如何將stl向量中的元素範圍設置爲特定值?

編輯:坦克所有那些誰指出,使用vector<bool>的問題。然而,我正在尋找一個更通用的解決方案,就像jalf給出的解決方案一樣。

回答

41

std::fillstd::fill_nalgorithm標題應該做的伎倆。

// set m elements, starting from myvec.begin() + n to true 
std::fill_n(myvec.begin() + n, m, true); 

// set all elements between myvec.begin() + n and myvec.begin() + n + m to true 
std::fill(myvec.begin() + n, myvec.begin() + n + m, true); 
3

不是我所知的。你可以嘗試使用像std :: for_each,std :: replace或std :: fill這樣的算法之一來隱藏事實,即你正在循環遍歷元素範圍,但循環你將會。

鑑於你說你正在使用布爾值的矢量 - 如果你使用的是專業化std :: vector,你可能需要閱讀this article by Herb Sutter中的「布爾怎麼樣」一節。

+0

我意識到引擎蓋下總是有一個循環。我正在尋找一種語法優雅的方式來隱藏它。 – Dima 2009-07-16 16:43:36

+0

感謝您關於矢量的警告。 – Dima 2009-07-16 16:47:27

5

矢量布爾。 向我的脊柱發送寒戰。

你有沒有看: 的std :: bitset的(用於固定大小的標誌套) 的boost ::來,dynamic_bitset(動態尺寸標記套)

設置的低8位在一排:

#include <bitset> 
#include <iostream> 


int main() 
{ 
    std::bitset<12>  flags; 
    flags |= 0x0FF; 

    std::cout << flags; 
} 
相關問題