C++ 11의 배열 (c-style 또는 std :: array)에서 벡터를 초기화하는 여러 가지 방법을 보았습니다. 다음과 같은 배열이 있다고 가정하십시오 : uint8_t arr[5000]
또는 예 : std::array<uint8_t, 5000> arr;
. 내가 편곡에서 5000 개 값을 원하는 경우벡터 초기화
, 나는이 방법을 초기화 할 수 있습니다 : 편곡이 std::array<uint8_t, 5000>
)
std::vector<uint8_t> vect(arr.begin(), arr.end());
std::vector<uint8_t> vect(arr, arr + 5000);
std::vector<uint8_t> vect(std::begin(arr), std::end(arr));
이 하나가 적용
this answer에 따르면 옵션 3은 옵션 1 및 2보다 좋습니다. 비회원 기능 대신 컨테이너의 멤버 기능을 사용하는 것이 좋습니다.
나는 항상 C 스타일 배열의 첫 번째 옵션을 보았습니다. 옵션 1은 옵션 2와 정확히 동일합니까? 그 뒤에있는 미묘한 점은 무엇입니까?
도움 주셔서 감사합니다.
사실, 모든 대답은 옵션 2보다 옵션 2를 사용하는 것이 좋습니다 - 실제로'begin()'과'end()'메소드를 구현하는 컨테이너의 경우, 어쨌든 똑같은 일을합니다. 또한 C 스타일 배열에서도 작동합니다. 시작과 끝 반복자를 얻기위한 비표준 메소드를 가진 이상한 컨테이너가 있다면, 항상 자유로운'begin'과'end' 함수를 작성할 수 있습니다. –
** 당신이 **에 링크 한 질문에서 허용되는 대답은 회원 기능을 사용하는 것이 더 낫다고 말하지 않습니다. 그는 단순히 C 스타일 배열에서도 자유 함수'begin'과'end'가 작동한다는 것을 지적하고 있습니다.나는 정확히 그 이유 때문에 자유로운 기능을 고수 할 것입니다. – Praetorian
또한 옵션 1에는 오프셋을 실제로 알 필요가 있다는 명백한 단점이 있습니다. :) –