다음은 배경입니다. 나는 이진 트리 이터레이터 (in-order)를 가지고있다. 그것은 스택의 맨 위에 포인터를 밀어 현재 노드의 부모 노드를 추적합니다. 이제 나는 상호 운용성을 원합니다. 즉, iterator
을 const_iterator
으로 변환 할 수 있습니다. 그러나 iterator
은 std::stack<pointer>
이고 const_iterator
은 std::stack<const pointer>
입니다.std :: stack <const pointer>에 std :: stack <pointer>을 변환하는 방법이 있습니까?
동일한 효과를 얻는 다른 방법도 있습니다.
편집
은 현재 내가 완전히 std::stack
를 사용하는 아이디어를 폐기했다. std::deque
및 push_back()
+ pop_back()
+ back()
입니다. std::deque<pointer>
을 std::deque<const pointer>
으로 변환하려면 std::copy(std::begin(ptrDeque), std::end(ptrDeque), std::begin(constPtrDeque));
을 사용하고 있으며이 설정은 이며 간단히 작동합니다.입니다.
나는 여전히 호기심에서이 질문에 대한 답변을 원합니다.
변형이 좀 더 복잡하면'std :: transform'을 사용할 수도 있습니다. 이 경우'std :: copy'가 좋습니다. – Naveen
'std :: copy' 대신에 deque에 [range form of insert] (http://en.cppreference.com/w/cpp/container/deque/insert)를 사용해야합니다. 일부 CRT 구현에서는 훨씬 더 빠를 수 있습니다. 'stack' 대신에'deque'를 사용하는 것에 관해서는 기본적으로 그것들은 같은 기본 데이터 구조입니다. 'std :: stack'은 다른 컨테이너에 스택 의미를 제공하는 어댑터 일뿐입니다. 이는 기본적으로 deque입니다. (나는 또한 벡터일지도 모른다고 생각하지만 정확히 기억하지는 않는다) –
@BillyONeal 그것은 'deque' AFAIK이다. – Hindol