簡體   English   中英

在2d向量上使用Iterator打印值

[英]Printing values using Iterator on 2d vector

這是我的代碼:

std::vector< std::vector<std::shared_ptr<int>> > om(2, std::vector<std::shared_ptr<int>>(2));
om[0][0] = std::shared_ptr<int>(std::make_shared<int>(1));
om[0][1] = std::shared_ptr<int>(std::make_shared<int>(2));
om[1][0] = std::shared_ptr<int>(std::make_shared<int>(3));       //init values
om[1][1] = std::shared_ptr<int>(std::make_shared<int>(4));

std::vector<std::shared_ptr<int>>::iterator pd;                  //inner iterator
std::vector< std::vector<std::shared_ptr<int>> >::iterator px;   //outer iterator


for(px = om.begin(); px != om.end(); px++){                    
    for(pd = (*px).begin(); pd !=  (*px).end(); pd++){

    std::cout<< *pd[0] << std::endl;
    }

}

輸出:

1 2 3 4

我正在使用shared_ptr創建一個二維矢量,我的目標是打印值

我的問題:

從我看到的其他示例中,您只需要取消引用迭代器來獲取值,但在我的情況下,如果我將使用std::cout<< *pd << std::endl; 它會打印不是我想要的原始地址。

但是如果我將使用std::cout<< *pd[0] << std::endl; 然后它會打印正確的值。

我把它想象成這樣:

[ [1][2], [3][4] ]

其中px將迭代2個塊,pd將不得不迭代4個塊。

為什么我必須放[0]才能打印? 還是那個未定義?

由於pd的類型為std::vector<std::shared_ptr<int>>::iterator ,因此*pd的類型為std::shared_ptr<int> 您必須再次取消引用才能獲得整數值。

*pd[0]相當於*(*(pd+0)) ,它相當於**pd

為什么我必須放[0]才能打印? 還是那個未定義?

std::vector::iterator是一個隨機訪問迭代器。 這為operator[]提供了與原始指針相同的語義。 因此, p[0]具有取消引用迭代器的效果,為您提供shared_ptr左值引用。 然后你用*取消引用它,給你它“指向”的int

您也可以這樣做,這可能更容易遵循:

std::cout<< **pd << std::endl;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM