2009-07-16 5 views
13

나는 불법의 벡터를 가지고있다. n 번째부터 m 번째까지 요소를 true으로 설정해야합니다. 루프를 사용하지 않고 이것을 수행하는 우아한 방법이 있습니까?stl 벡터의 요소 범위를 특정 값으로 설정하는 방법은 무엇입니까?

편집 : vector<bool>을 사용하여 문제를 지적한 모든 사람들에게 탱크 : 그러나, 나는 더 일반적인 솔루션을 찾고 있었는데, 예를 들어 jalf가 제공 한 솔루션과 같습니다.

답변

41

std::fill 또는 std::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과 같은 알고리즘 중 하나를 사용하여 요소 범위를 반복하면서 사실을 숨길 수 있습니다.

전문 지식 표준 벡터를 사용한다고 가정하면 this article by Herb Sutter의 "what about bool"섹션을 읽는 것이 좋습니다.

+0

난 항상 두건 아래에 루프가 있다는 것을 알고 있습니다. 나는 구문 적으로 우아한 방법을 숨기려고했다. – Dima

+0

그런데 벡터 에 대한 경고를 보내 주셔서 감사합니다. – Dima

5

bool의 벡터. 내 척추가 떨리는 것을 보냅니다.

#include <bitset> 
#include <iostream> 


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

    std::cout << flags; 
} 
: 표준 : 비트 세트 연속 바닥 8 개 비트를 설정 (동적 크기 플래그 세트) 부스트 :: dynamic_bitset

(고정 된 크기 플래그 세트의) :

당신이 봤어
+0

감사합니다. 나는 이미 벡터 을 사용하는 어리 석음을 깨닫고 벡터 으로 전환했다. 실제로이 문제에 대한 좀 더 일반적인 해결책을 찾고있었습니다. – Dima

관련 문제