c++ - C++:std::list 之间的区别和 std::list<*type>
问题描述
我目前正在学习 C++,我已经看到一个迭代器执行以下操作:
for(std::list<Type*>::iterator iter = list.begin();
iter != list.end(); ++iter) {
if (!isInRange(**iter)) {
iter = list.erase(**iter);
}
}
现在,我的问题是:我如何知道是否使用了双指针?要获取 iter 的对象,解决方案使用两个**
,但迭代器的声明将类型定义为单指针,而不是双指针:<Type*>
。std::list<Type*>
和有区别std::list<*Type>
吗?如果*
类型右侧的 a 表示它是双指针,那么我会理解为什么我需要使用两个**
来获取对象。
非常感谢您!乔达
解决方案
专注于您的主要问题:
如何知道是否使用了双指针
您正在创建一个存储 Type ( Type*
) 类型指针的列表,并且您正在使用 astd:list<T>:iterator
来迭代此列表。
迭代器基本上引用列表的一个节点。“根据定义”,它是一个指针。
您存储在列表中的值是类型 (Type*) 的指针。您正在使用迭代器引用一个值 (Type*)。
- 变量 iter 是您的迭代器。它引用了您列表中的一个值(类型*)。
- 该指令
*iter
将返回一个Type*
(类型的指针Type
)。 - 该指令
**iter
将返回一个Type
(类型的值Type
)。
总结起来,你总是需要使用*iter
来获取迭代器引用的值。如果您**iter
创建了一个存储指针的列表并且想要获取存储在列表中的指针引用的值,则需要。
关于您提供的代码的最后一行,iter = list.erase(**iter)
您必须使用iter
而不是**iter
,因为该erase
方法需要一个迭代器作为参数,而不是一个Type
.
最后,如果您创建一个列表Type
而不是列表Type*
,*iter
将返回一个类型的值Type
。
请尝试以更清晰的方式提出您的问题。
推荐阅读
- c++ - c++ 中的设置操作(更新现有值)
- python-3.x - 与日期列的逻辑比较在 Pandas 数据框中不起作用
- python-3.x - 处理“\000”、“\n”、“\r”、“bellchars”等特殊字符;在 pyspark 数据框中
- javascript - 表单更新后如何在html中重新加载特定区域
- react-native - 如何查看反应原生组件的可用样式
- gnuplot - Gnuplot 将时间绘制为 X 轴
- linux - 如何为 Wildfly 服务器组启动和停止创建 .sh 脚本?
- excel - 减去日期时,我在 Excel 中得到一个日期编号
- c# - SOAP 请求 Web 服务结构结果
- python - 有人能告诉我为什么这个程序不工作吗?