对原生c++指针(如uint16 *)的std::find()的替代或增强
Alternatives or enhancements to std::find() on a native c++ pointer (such as uint16 *)
我正在尝试用一行c++条件检查来检查缓冲区内值的存在。(就像python中list: check中的if 'value')
std::find
似乎很适合这里。
char *buf = "01020304";
int buf_len = 8
uint16_t *ptr = std::find((uint16_t *) buf, (uint16_t *) buf + 3, (uint16_t)13360); // 13360 corresponds to 2 bytes in "04"
std::cout <<"n(ptr-buf):"<<(ptr-(uint16_t *) buf);//returns 3 for any value, even if 0 is passed instead of 13360 since the last 2 bytes are not searched (buf+6, buf +7))
std::find
似乎在缓冲区的[first, last]范围内搜索。这对于像vector这样的STL类型是有意义的。但是,对于原始指针,使std::find()
查看buf
的最后一个元素的唯一方法涉及传递超出但是的偏移量(例如。buf + 8)。
这样做安全吗?我猜不会。是否有更好的替代使用std::find
做单行存在检查的char *buffer
?
在STL算法中使用指针时,使用'过一结束'指针作为范围的结束迭代器是有效且正确的。在数组结束后1点对指针解引用是无效的,但可以对其进行测试,并对其进行某些算术运算。
标准规定了在"过了结束符1"指针上执行比较是有效的,第5.9.3节,"关系操作符":
5.9.3比较指针和对象的定义如下:(3.1)—如果两个指针指向同一数组的不同元素,或指向其子对象,则指向下标较高的元素的指针相对较大。
(3.2)—如果一个指针指向数组的元素或其子对象,而另一个指针指向数组最后一个元素的后一位置,则后一个指针比较大。
它还指定了指针的加法和减法,使指针在std::distance()
, std::advance()
等算法中正确运行。
此外,标准对STL迭代器有如下规定:
就像指向数组的普通指针保证有一个指针值指向数组的最后一个元素一样,对于任何迭代器类型,都有一个迭代器值指向相应序列的最后一个元素。这些值称为结束后值。定义表达式*i的迭代器i的值称为可解引用的。标准库从不假定过端值是可解引用的. ...
结束指针之后也是标准的C。例如,使用算术运算可以安全地生成它们:来自C11标准,6.5.6(加法运算符)第8段:
…如果两个指针操作数和结果指向相同数组对象的元素,或者指向上一个数组对象元素,则计算不应产生溢出;否则,行为是未定义的。如果结果指向数组对象的最后一个元素之后的位置,则返回不能用作一元*运算符的操作数。
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 无法将结构注册为增强几何体3D点
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- 使用.find函数在c++中查找字符和另一个字符之间的大小
- 在 QVector<std::unique_ptr 上使用 std::find<Type>>
- 错误"Could not find Boost"(缺少:上下文标头)
- 增强基于 XML class_id的反序列化
- 增强精神解析器规则以检测语句中的特殊结尾
- C++ 使用增强正则表达式库时断言崩溃
- 增强精神 X3:错误:在"..."中没有名为"大小"的类型
- /usr/bin/ld: cannot find -lc++
- std::find,返回所有找到的值的替代方法,而不仅仅是存在重复的向量的第一个值
- 使用 find 解析文件会给出不同文件的奇怪结果
- 如何包装(撰写)增强 hana 地图并访问括号运算符(运算符 [])?
- 有没有办法在C ++中检测汉字?(使用增强)
- 如何将增强MSM与增强信号结合使用?
- 在 ifcondition al中 find() C++ STL 中的 == a.end() 有什么用?
- Cannot find -lglad
- "Cannot find -l<directory>"错误 - CMake
- 对原生c++指针(如uint16 *)的std::find()的替代或增强