2012-07-07 33 views
12

Tôi đã thêm trình hiển thị cho một số loại của chúng tôi để autoexp.dat. Ngay cả với that blog that everyone refers back đến (ngay cả những kẻ microsoft!) Nó đã được một cuộc đấu tranh ở lần.Trực quan hóa cây trong VS2008

Nhưng tôi hoàn toàn bị bối rối bởi trình hiển thị #tree. Đầu tiên, bài đăng trên blog dường như có đầy đủ các lỗ hổng trong mô tả về nó (và không có tài liệu nào khác tôi có thể tìm thấy địa chỉ - nhưng những người khác rõ ràng đã nhận được nó). Đặc biệt có vẻ là một số trường hợp phép thuật mà nó biết để dereference một con trỏ - nhưng tôi không thể chắc chắn tôi đã đảo ngược thiết kế ý định. Cũng có vẻ có sự mơ hồ giữa khi bạn sử dụng $ c và $ e. AFAICS chúng dường như có thể hoán đổi cho nhau - có lẽ cả hai được cho phép như là một trợ giúp để dễ đọc? Hoặc chúng thực sự có nghĩa là những thứ khác nhau (blog đó, ví dụ, sử dụng $ e, nơi các visualizers stl đi kèm với VS2008 sử dụng $ c).

Nhưng những gì thực sự thiếu là giải thích về cách mọi thứ phù hợp với nhau. Tôi đã có thể tưởng tượng nó sẽ theo quy trình này:

  1. Áp dụng các "đầu" quy tắc để có được nút bắt đầu (bởi con trỏ)
  2. Áp dụng các quy tắc deref (bit ở cuối) đến dereferenced nút hiện tại để nhận giá trị cho hình ảnh hóa.
  3. Áp dụng các quy tắc trái và phải cho nút dereferenced nút hiện tại để đến nút trái và phải tương ứng (bằng con trỏ - với null như một terminator, trừ khi quy tắc bỏ qua được chỉ định).
  4. Chuyển đến (2) cho đến khi tất cả các nút đã được truy cập.

Rõ ràng là có một thuật toán để điều hướng sang trái/phải ở đó mà tôi đã tô bóng. Điều đó không quá quan trọng. Điều quan trọng hơn là giá trị nào được xem xét ở từng giai đoạn và khi diễn ra hội nghị.

Điều đó dường như là quá trình duy nhất tôi có thể tưởng tượng phù hợp với các ví dụ tôi đã thấy. Nhưng tôi đã không thể làm cho nó hoạt động với việc thực hiện cây của chúng tôi. Tôi chỉ nhận được (lỗi), nơi các con #tree sẽ được hiển thị (tôi nhận được một (lỗi) cho mỗi nút, vì vậy tôi đoán kích thước đang được chụp chính xác). Tôi đã cố gắng bao giờ biến thể có thể tôi có thể nghĩ đến - hầu hết nhiều lần!

Điều khác khiến tôi đố là nhiều ví dụ mà tôi đã thấy, bao gồm các ví dụ đã được sắp xếp, điều hướng từ đầu đến gốc (hoặc tương tự) và bỏ qua nút đầu. Tại sao họ làm điều đó?

Đây là visualiser Tôi đang sử dụng (theo một trong các hình thức tôi đã cố gắng - và tên đã được thay đổi để bảo vệ các doanh nghiệp ...):

MyTree<*,*,*>{ 
    children(
     #(
      [raw members]: [$c,!], 
      #tree 
      (
       head : $c.m_root.m_p, 
       size : $c.m_size, 
       left : left.m_p, 
       right : right.m_p 
      ) : $e.value 
     ) 
    ) 
} 

Và đây là một số mã giả cho các lớp học cây của tôi:

MyTree: 
    Ptr<Note> m_root 
    int m_size 

Node: 
    ValueT value 
    Ptr<Node> left 
    Ptr<Node> right 

... trong đó Ptr <> là con trỏ thông minh, giữ con trỏ thô trong m_p.

Mọi trợ giúp sẽ được đánh giá cao.

+0

Một số điều này có thể chỉ hoạt động đối với các thiết kế MS mà chúng đã được thử nghiệm. Giống như những người có nút sentinel (họ có thể bỏ qua). Tôi đã có vấn đề tương tự như cố gắng để phù hợp trong một thiết kế danh sách liên kết mà deviates từ bản gốc. Không may mắn với điều đó. –

+0

Tôi không có nút gửi - vì vậy nó phải * dễ dàng hơn *, tôi đã nghĩ. Của tôi trông giống như ví dụ virtualdub trong hầu hết các khía cạnh - sự khác biệt lớn nhất là việc sử dụng con trỏ thông minh của tôi. – philsquared

Trả lời

5

Chúng tôi đã bắt đầu thực sự thực sự cần điều này! Vì vậy, tôi đã mở một tiền thưởng nhưng thực hiện trên nhìn vào nó bản thân mình.

Có vẻ như tôi đã giải quyết nó! (đối với trường hợp của tôi).Tôi đã thực sự khá chặt chẽ:

MyTree<*,*,*>{ 
    children(
     #(
      [raw members]: [$c,!], 
      #tree 
      (
       head : $c.m_root.m_p, 
       size : $c.m_size, 
       left : left, 
       right : right 
      ) : $e.value 
     ) 
    ) 
} 

Bí quyết là rằng các quy tắc đầu cần phải thể hiện đầy đủ như thế nào để có được con trỏ thô trong con trỏ thông minh nhưng trái/quy tắc đúng không (và cũng như thế với de- quy tắc ref).

Các vấn đề liên quan