std::查找类型为T**vs T*[N]
std::find with type T** vs T*[N]
我更喜欢使用std::string
,但我喜欢弄清楚这里出了什么问题。
我无法理解为什么std::find
不能正确地用于类型T**
,即使指针算术可以正确地用于它们。类似-
std::cout << *(argv+1) << "t" <<*(argv+2) << std::endl;
但对于类型T*[N]
,它运行良好。
#include <iostream>
#include <algorithm>
int main( int argc, const char ** argv )
{
std::cout << *(argv+1) << "t" <<*(argv+2) << std::endl;
const char ** cmdPtr = std::find(argv+1, argv+argc, "Hello") ;
const char * testAr[] = { "Hello", "World" };
const char ** testPtr = std::find(testAr, testAr+2, "Hello");
if( cmdPtr == argv+argc )
std::cout << "String not found" << std::endl;
if( testPtr != testAr+2 )
std::cout << "String found: " << *testPtr << std::endl;
return 0;
}
传递的参数:Hello World
输出:
你好世界
未找到字符串
找到字符串:Hello
谢谢。
比较char const*
的类型相当于指向地址。除非您将"Hello"
的地址与字符串文字"Hello"
的另一个地址进行比较,否则它的地址是不同的(在这种情况下,指针可能比较相等)。compare()
函数比较所指向的字符。
在第一种情况下,您比较的是指针值本身,而不是它们指向的内容。常量"Hello"的地址与argv
的第一个元素的地址不同。
尝试使用:
const char ** cmdPtr = std::find(argv+1, argv+argc, std::string("Hello")) ;
std::string
知道比较内容而不是地址。
对于数组版本,编译器可以将所有文字折叠成一个单独的文字,因此每次在代码中看到"Hello"时,它实际上都是同一个指针。因此,比较中的相等性
const char * testAr[] = { "Hello", "World" };
const char ** testPtr = std::find(testAr, testAr+2, "Hello");
产生正确的结果
相关文章:
- 正在查找文档以获得PS4平台的C++中的设备信息
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 在C++中查找文件
- 模板元程序查找相似的连续类型名称
- 在UNIX系统中使用DIR查找文件的字节大小
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 查找最接近的大于当前数字的数字的索引
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 查找后更改类变量
- 数据成员SFINAE的C++17测试:gcc vs clang
- 可视化 使用 VS Code 查找C++应用程序中的内存泄漏
- if else VS映射查找
- 在编辑头文件时,VS Intellisense如何从stdafx.h中查找定义
- VisualStudio 2015 链接器查找 VS 2010 库
- 如何在 VS C++ 中查找发生异常的位置
- VS 2008 调试 - 查找加载的对话框
- 映射查找函数调用 Vs 将查找缓存为静态变量
- 在VS C++ 6.0中,哪些调试工具适合查找内存泄漏的位置
- 性能标准::strstr vs. 标准::字符串::查找
- std::查找类型为T**vs T*[N]