2014-12-02 2 views
2

벡터 내용이 포함 된 valarray를 채우기 위해 다음을 작성하는 것이 안전합니까?벡터에서 valarray를 초기화하는 방법은 무엇입니까?

vector<int> myVect = {2,0,1,0,0,1,1,0,0,0}; // Any vector 
valarray<int> myVala (&(myVect[0]), myVect.size()); 
//Edit: as suggested by Xeo, this code looks much cleaner (C++11) 
valarray<int> myVala (myVect.data(), myVect.size()); 

제대로 작동하는 것으로 보이지만 어떤 경우에도 작동하는지 확인하고 싶습니다.

+0

요즘 나는 'valarray'를 전혀 사용하지 않는 것이 좋은가요? 표준 라이브러리의 검은 양입니다. –

+0

왜 그런가요? 마스크와 조각이있는 부분 집합을 선택하는 데 사용할 계획입니다. 나는이 구조에 익숙하지 않지만 첫눈에 유용하게 보인다. – wxc3

+0

인기가 없었습니다. 대부분의 구현은 실제로 최적화가 제대로되어 있지 않아 사용의 어려움이 있습니다. 그것은 약간의 닭고기 및 계란 상황입니다. –

답변

3

예, 괜찮습니다. 벡터의 내용은 연속적이어야합니다 (C++ 표준의 [vector.overview], §1 참조).

C++ 11부터 이니셜 라이저 목록을 사용하여 valarray을 직접 초기화 할 수 있습니다.

+1

(init-list 외에도 데이터가 다른 곳에서 온 것인지 말하면됩니다.) std :: valarray vla (vec.data(), vec.size())' – Xeo

+0

이것은 실제로 훨씬 더 읽기 쉽습니다. .data(),이 표기법을 포함하도록 내 메시지를 편집했습니다. – wxc3

관련 문제