微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何修剪存储在std :: set中的string?

我正在使用VS 2012的MFC应用程序。在这个应用程序中,我想通过使用Trim()成员函数清理CString对象的容器。 首先,我使用了一个std::vector作为容器,如下面的MCVE所示:

#define _AFXDLL // CString #include <afx.h> // CString #include <vector> int main() { std::vector<CString> v; v.push_back(_T("Test")); v.begin()->Trim(); return 0; }

这个编译和按预期工作。 然后,我想用std::setreplacestd::vector 。 因此,我包含#include <set>而不是#include <vector>并更改了main() ,如下所示:

int main() { std::set<CString> s; s.insert(_T("Test")); s.begin()->Trim(); return 0; }

但是,这给了我下面的编译错误s.begin()->Trim(); 线:

错误C2663:'ATL :: CStringT >> :: Trim':3重载没有合法的转换'this'指针

我在哪里可以find用于文件夹和应用程序的认图标?

C#ClickOnce安装文件夹 – Windows如何生成文件名称

debugging线程时无限循环

有关通过Windows安装程序安装应用程序的问题

正则expression式查找tasklist -v在窗口中输出的过程

错误的文档基本上说:

[…]这个错误可能是由调用一个const对象的非const成员函数引起的。 […]

但是,与vector版本相比,我没有添加任何const限定符。 另外, std::set::begin()提供了一个非常量迭代器,就像std::vector::begin()一样。 我在错误C2663上find类似的问题,例如这个 。 但是在大多数情况下,有人试图从const函数修改一个成员,这在我的代码中并不是这样。

为什么我不能在std::set CString对象上使用Trim() ,我该如何解决这个问题?

如何获取窗口的位图对象在C + +的屏幕截图?

composer PHP – 无法在Windows上安装mongodb / mongodb

Windows操作系统中(软实时)时序要求的限制

sprintf一个LPCWSTRvariables

无法使用Go连接到MS sql Server

如何修剪存储在std :: set中的字符串?

你不能,你不应该。 std::set中的元素在内部排序。 如果你被允许改变他们,这将打破订单。

您最好的选择是从集合中删除现有的项目,并将修改后的项目添加到集合中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐