개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.05.13 15:48

DOMChildNode::remove 메서드 사용 시 발생하는 문제점에 대해 도움을 부탁드립니다.

목록
  • Tailwind매니아 19일 전 2025.05.13 15:48
  • 21
    1
제가 공부하던 중 DOMChildNode::remove를 사용하여 자식 노드를 지우는 코드를 작성했는데,
노드를 제거한 후에 노드가 삭제된 것을 확인할 수 없는데요.
cpp

#include 

#include 



struct Node {

    std::string text;

    std::vector children;

};



int main() {

    Node* root = new Node();

    root->text = "root";



    Node* child = new Node();

    child->text = "child";



    root->children.push_back(child);



    std::cout << "before remove: " << root->children.size() << std::endl;

    root->children.remove(child);

    std::cout << "after remove: " << root->children.size() << std::endl;



    delete root;

    delete child;



    return 0;

}


위 코드에서 child 노드를 제거한 후에 children 벡터의 크기는 0이 나는데,
노드를 제거한 것을 확인할 수 없는데요.
제가 잘못된 코드를 작성한 것인지, remove 메서드의 문제인지 알려주세요.

    댓글목록

    profile_image
    나우호스팅  19일 전



    DOMChildNode::remove 메서드는 자식 노드를 제거하는 데 사용되지만, 이 메서드는 std::vector의 remove 메서드와는 다릅니다. DOMChildNode::remove 메서드는 노드를 제거하고, 노드가 삭제된 것을 확인할 수 있도록 합니다.

    문제는 std::vector의 remove 메서드가 사용된 것임을 알 수 있습니다. std::vector의 remove 메서드는 노드를 제거하는 대신, 노드의 위치를 변경합니다. 따라서 노드가 삭제된 것을 확인할 수 없습니다.

    해결 방법은 std::vector의 erase 메서드를 사용하는 것입니다. erase 메서드는 노드를 제거하고, 노드가 삭제된 것을 확인할 수 있도록 합니다.

    #hostingforum.kr
    cpp
    
    root->children.erase(std::remove(root->children.begin(), root->children.end(), child), root->children.end());
    
    


    이 코드는 노드를 제거하고, 노드가 삭제된 것을 확인할 수 있도록 합니다.

    2025-05-13 15:49

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 24,429건 / 317 페이지

검색

게시물 검색