在列表模板中搜索空白
Search for empty spaces in list template
我正在尝试搜索列表(模板)并检查列表是否包含空格。如果有空格,那么我想将它们从列表中删除。
list <char> L1;
if (!L1.empty())
{
for (auto f = L1.begin(); f != L1.end(); ++f)
{
if (f == " ")
L1.remove(f);
}
}
Error: IntelliSense: no operator "=="
matches these operands
operand types are: std::_List_iterator<std::_List_val<std::_List_simple_types<char>>> == const char
我该如何实施?
f 在你的代码中是一个迭代器,它指向你的列表 L1 中的一个元素。迭代器只是一些奇特的指针,所以如果你想访问你的迭代器指向的元素,你可以使用 *f
.
因此您的代码应该是:
列出 L1;
if (!L1.empty())
{
for (auto f = L1.begin(); f != L1.end();)
{
if (*f == ' ')
L1.remove(f);
else
++f;
}
}
编辑:
同样正如@paler123 所指出的,您应该将双引号更改为撇号,因为引号用于字符数组,撇号用于字符。
另外请注意,当您使用迭代器从 L1 中删除一个元素时,迭代器会自动递增(指向下一个元素)并且它会通过 for 再次递增,因此您将跳过一个元素.
您的代码中有 4 个问题:
f
是一个迭代器。要访问该值以进行比较,您需要取消引用迭代器 *f
.
- 您的列表包含单个字符,因此您应该与 space 字符
' '
进行比较,而不是包含单个 space " "
的字符串
std::list::remove
takes a value not an iterator, you need 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% 可靠,请始终编译您的代码以获得真正的错误消息。
我正在尝试搜索列表(模板)并检查列表是否包含空格。如果有空格,那么我想将它们从列表中删除。
list <char> L1;
if (!L1.empty())
{
for (auto f = L1.begin(); f != L1.end(); ++f)
{
if (f == " ")
L1.remove(f);
}
}
Error: IntelliSense: no
operator "=="
matches these operands operand types are:std::_List_iterator<std::_List_val<std::_List_simple_types<char>>> == const char
我该如何实施?
f 在你的代码中是一个迭代器,它指向你的列表 L1 中的一个元素。迭代器只是一些奇特的指针,所以如果你想访问你的迭代器指向的元素,你可以使用 *f
.
因此您的代码应该是: 列出 L1;
if (!L1.empty())
{
for (auto f = L1.begin(); f != L1.end();)
{
if (*f == ' ')
L1.remove(f);
else
++f;
}
}
编辑: 同样正如@paler123 所指出的,您应该将双引号更改为撇号,因为引号用于字符数组,撇号用于字符。
另外请注意,当您使用迭代器从 L1 中删除一个元素时,迭代器会自动递增(指向下一个元素)并且它会通过 for 再次递增,因此您将跳过一个元素.
您的代码中有 4 个问题:
f
是一个迭代器。要访问该值以进行比较,您需要取消引用迭代器*f
.- 您的列表包含单个字符,因此您应该与 space 字符
' '
进行比较,而不是包含单个 space" "
的字符串
std::list::remove
takes a value not an iterator, you needstd::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% 可靠,请始终编译您的代码以获得真正的错误消息。