我有布爾人的矢量。我需要將其元素從第n個到第m個設置爲true
。有沒有一個優雅的方式來做到這一點,而不使用循環?如何將stl向量中的元素範圍設置爲特定值?
編輯:坦克所有那些誰指出,使用vector<bool>
的問題。然而,我正在尋找一個更通用的解決方案,就像jalf給出的解決方案一樣。
我有布爾人的矢量。我需要將其元素從第n個到第m個設置爲true
。有沒有一個優雅的方式來做到這一點,而不使用循環?如何將stl向量中的元素範圍設置爲特定值?
編輯:坦克所有那些誰指出,使用vector<bool>
的問題。然而,我正在尋找一個更通用的解決方案,就像jalf給出的解決方案一樣。
std::fill
或std::fill_n
在algorithm
標題應該做的伎倆。
// 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);
不是我所知的。你可以嘗試使用像std :: for_each,std :: replace或std :: fill這樣的算法之一來隱藏事實,即你正在循環遍歷元素範圍,但循環你將會。
鑑於你說你正在使用布爾值的矢量 - 如果你使用的是專業化std :: vector,你可能需要閱讀this article by Herb Sutter中的「布爾怎麼樣」一節。
矢量布爾。 向我的脊柱發送寒戰。
你有沒有看: 的std :: bitset的(用於固定大小的標誌套) 的boost ::來,dynamic_bitset(動態尺寸標記套)
設置的低8位在一排:
#include <bitset>
#include <iostream>
int main()
{
std::bitset<12> flags;
flags |= 0x0FF;
std::cout << flags;
}
我意識到引擎蓋下總是有一個循環。我正在尋找一種語法優雅的方式來隱藏它。 – Dima 2009-07-16 16:43:36
感謝您關於矢量的警告。 –
Dima
2009-07-16 16:47:27