我正在尝试搜索列表(模板),并检查列表中是否包含空格。如果有空格,那么我想从列表中删除它们。
list <char> L1;
if (!L1.empty())
{
for (auto f = L1.begin(); f != L1.end(); ++f)
{
if (f == " ")
L1.remove(f);
}
}
错误:IntelliSense:没有
operator "=="
与这些操作数匹配 操作数类型为:std::_List_iterator<std::_List_val<std::_List_simple_types<char>>> == const char
我该如何实现?
答案 0 :(得分:1)
您的代码中有4个问题:
f
是一个迭代器。要访问该值以进行比较,您需要取消引用迭代器*f
。' '
进行比较,而不是与包含单个空格" "
的字符串进行比较std::list::remove
接受的值不是迭代器,您需要std::list::erase
更正后的代码是:
if (!L1.empty())
{
for (auto f = L1.begin(); f != L1.end();)
{
if (*f == ' ')
{
f = L1.erase(f);
}
else
{
++f;
}
}
}
请注意,std::list
内置了此功能,因此您可以致电
L1.remove(' ');
P.S。不要相信来自intellisense的错误会比以前更好,但仍不能100%可靠,请始终编译您的代码以获取真实的错误消息。
答案 1 :(得分:0)
f是一个迭代器,它指向列表L1中的元素。迭代器只是后面的一些奇特的指针,因此,如果要访问迭代器指向的元素,则可以使用DataModel d1(/* Parameter... */);
ComputationModel c1(/* Parameter... */);
DataModel d2(d1); // copy-construct instance, d1 passed as refence to the base class
DataModel d3(c1); // same behavior
。
因此您的代码应为: 列表L1;
DataModel(const DataModel& other) = default;
编辑: 同样,如@ paler123所指出的,您应该将双引号更改为撇号,因为引号用于char数组,而引号用于char。
还有一个注意事项,当您使用迭代器从L1中删除一个元素时,该迭代器会自动递增(指向下一个元素),并且它会再次通过for递增,因此您跳过了一个元素。 / p>