std::sort使用const iterator引发的编译错误

编译如下代码。

std::vector<int64_t> xv;
std::sort(xv.cbegin(),xv.cend());

编译时遇到了一个no matching function for call to 'swap'的错误,但自己并没有直接使用这个函数,详细信息如下。

In file included from D:\share\map_jni\app\src\main\cpp\map\MapBox.cpp:4:
In file included from D:\share\map_jni\app\src\main\cpp\include\map\MapBox.h:7:
In file included from C:\Users\luopu\AppData\Local\Android\Sdk\ndk\20.0.5594570\toolchains\llvm\prebuilt\windows-x86_64\sysroot\usr\include\c++\v1\string:505:
In file included from C:\Users\luopu\AppData\Local\Android\Sdk\ndk\20.0.5594570\toolchains\llvm\prebuilt\windows-x86_64\sysroot\usr\include\c++\v1\string_view:176:
In file included from C:\Users\luopu\AppData\Local\Android\Sdk\ndk\20.0.5594570\toolchains\llvm\prebuilt\windows-x86_64\sysroot\usr\include\c++\v1\__string:57:
C:\Users\luopu\AppData\Local\Android\Sdk\ndk\20.0.5594570\toolchains\llvm\prebuilt\windows-x86_64\sysroot\usr\include\c++\v1\algorithm:3833:17: error: no matching function for call to 'swap'

继续定位到algorithm中sort函数使用*swap*这里。
在这里插入图片描述
这是啥错误,一脸疑惑。看样是没有找到swap函数的声明,不可能呀。
后来发现是因为sort的参数用了cbegin,但sort会改变容器,没有带const的版本,所以找不到函数定义。找不到函数名时,很容易忽略const的影响。但这编译器的错误提示,也太不友好了。
将cbegin, cend改为begin,end,编译通过。

std::list 是 C++ STL 中的一个容器,其提供了以下接口: 1. 构造函数 - list() : 默认构造函数 - list(size_t n, const T& val = T()) : 构造一个大小为 n 的 list,每个元素都初始化为 val - list(const list& lst) : 复制构造函数 - list(list&& lst) noexcept : 移动构造函数 2. 迭代器 - begin() : 返回指向 list 开头的迭代器 - end() : 返回指向 list 结尾的迭代器 - rbegin() : 返回指向 list 结尾的反向迭代器 - rend() : 返回指向 list 开头的反向迭代器 3. 容量 - empty() : 判断 list 是否为空 - size() : 返回 list 中元素的个数 - max_size() : 返回 list 大小的最大值 4. 访问元素 - front() : 返回 list 中第一个元素的引用 - back() : 返回 list 中最后一个元素的引用 5. 修改容器 - push_front(const T& val) : 在 list 开头插入一个元素 - push_back(const T& val) : 在 list 末尾插入一个元素 - pop_front() : 删除 list 开头的元素 - pop_back() : 删除 list 末尾的元素 - insert(iterator pos, const T& val) : 在 pos 处插入一个元素 - erase(iterator pos) : 删除 pos 处的元素 - erase(iterator first, iterator last) : 删除 [first, last) 区间内的元素 - clear() : 清空 list 中的所有元素 6. 其他操作 - splice(iterator pos, list& lst) : 将 lst 中所有元素移动到 pos 前面 - remove(const T& val) : 删除 list 中所有值为 val 的元素 - sort() : 对 list 进行排序 - reverse() : 反转 list 中所有元素的顺序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值