c++中使用equal 比较两个C风格字符串vector的问题-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

c++中使用equal 比较两个C风格字符串vector的问题

2016-03-09 14:31:12 2843 4

c++primer(第5版)中的一个练习题 P339 T10.5
如果两个容器中保存的是c风格字符串
list
,运用equal 比较两个容器会出现什么样的结果?

#include <list>
#include <iostream>
#include <algorithm>
#include <numeric>
using std::list;
using std::cout;
using std::endl;
using std::equal;

int main()
{
    list<const char*> lc(12, "bca");
    list<const char*> lc2(12, "bc");
    cout << equal(lc.cbegin(), lc.cend(), lc2.cbegin());//#1 输出0

    list<const char*> lc3(12, "bca");
    list<const char*> lc4(12, "bca");
        cout << equal(lc3.cbegin(), lc3.cend(), lc4.cbegin());//#2 输出1

    cout<< typeid(*lc3.begin()).name();//#3 char const *

    cout<< (*lc3.begin()==*lc4.begin());//# 4编译通过  输出1
    return 0;
}

请问:
1.按道理来说两个C风格字符串是未定义“==”运算符的,运用“==”比较应该比较的是其指针指向的元素,但第一第二个cout表明并不是这样?
2.是否是equal算法重载了“==”运算符?
3.迭代器指向元素的比较也是用的元素类型的比较运算符,为什么第四个cout结果为1

取消 提交回答
全部回答(4)
  • 游客duzwdtzqsaq3i
    2020-08-03 20:20:14

    不错,打好基础加油干

    0 0
  • nothingfinal
    2019-07-17 18:56:07

    参考一楼分析,非常详细

    0 0
  • xumaojun
    2019-07-17 18:56:07

    楼上分析很详细了,学习一下

    0 0
  • a123456678
    2019-07-17 18:56:07

    前三个问题其实看一下equal实现的源码就很清楚了,注意查看官方文档

    这里面写的很清楚:The elements are compared using operator== (or pred, in version (2)).
    也就是这里的==是做过重载了的

    最后一个问题其实挺有意思,但是要记着,字符串之间的==一般(注意是一般,这个有时候特殊)都是比较字符串地址,
    你list生成的时候用的是一个"字符串常量",你虽然创建了两个list,然而初始化用的是同一个”字符串常量“(存储在静态数据区,是全局的)
    说白了就是地址是一样的,字符串常量的问题有时候一眼看不出来,但是确实是一个比较有意思的点,下面是我运行时候断点的截图:
    screenshot

    0 0
添加回答
相关问答

0

回答

请教一下各位,程序使用flink1.13.1, flink-connector-mysql-cdc

2022-07-25 10:32:15 143浏览量 回答数 0

1

回答

wtforms内置校验器EqualTo的功能是什么呀?

2021-11-18 21:11:37 110浏览量 回答数 1

1

回答

java.sql.SQLException:错误的字符串值:“ \ xF0 \ x9F ?mysql

2020-05-17 13:11:55 376浏览量 回答数 1

0

回答

GitLab运行程序不一致:exec-maven-plugin:1.6.0:java org.apa

2019-11-29 23:04:47 637浏览量 回答数 0

1

回答

使用ssh 客户端工具连接 Network error: Connection timed out

2018-11-09 16:59:39 928浏览量 回答数 1

0

回答

技术运维问题 - MYSQL使用 -RDS for MySQL 如何修改 utf8mb4 字符集

2018-09-28 22:47:19 1992浏览量 回答数 0

0

回答

技术运维问题 - MYSQL使用 -RDS for MySQL 查看和设置时区的方法

2018-09-28 22:46:17 2088浏览量 回答数 0

0

回答

技术运维问题 - MYSQL使用 -RDS for MySQL查看增量数据的方法

2018-09-24 22:12:34 1598浏览量 回答数 0

0

回答

请问使用CommonRequest访问EDAS的API时,版本号在哪里能找到?

2018-06-05 11:03:01 2057浏览量 回答数 0

3

回答

买阿里云默认的系统盘40g有必要选择SSD的吗

2016-03-31 19:33:40 5666浏览量 回答数 3
+关注
0
文章
14879
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载