在 2D 矢量上使用迭代器打印值
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
制作 2d 矢量,我的目标是打印值
我的问题:
从我看到的其他示例中,您只需要取消引用迭代器即可获取值,但就我而言,如果我使用 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;
相关文章:
- 了解运算符重载和迭代器,为什么它会打印出"wrhrwwr"?
- 为什么这个程序没有打印返回的迭代器的正确第二个元素?
- 从矢量不需要的值进行迭代器打印
- 使用迭代器打印矢量元素
- 通过迭代器打印出地图的值
- C++ Map erase(),迭代器打印 erased 元素
- 如何修复使用矢量和迭代器打印值的错误
- 打印一个列表给出错误,指出迭代器不可递减
- 如何使用迭代器在列表中打印类对象
- 似乎无法使用<VERTEX>迭代器在 for 循环中打印列表顶点?C++
- 如何在不使用迭代器的情况下在 C++ 中打印地图
- 为什么 g++ 需要 -fallowive 标志来打印 c++ 中的迭代器值
- 如何打印迭代器类型列表<pair<int,int>>::iterator itrator it指向的元素
- 我可以用cout而不是迭代器循环打印STL映射吗?
- C++流和迭代器:为什么它只打印一次
- 迭代器打印两个值,一个是文本,另一个是指针
- 矢量迭代器 -> 打印序列(缺少参数)
- 使用c++迭代器打印vector对象
- 使用迭代器打印multimap
- 在 2D 矢量上使用迭代器打印值