c++ - 'auto *const' 具有 std::_Array_iterator<char, 48> 类型的不兼容初始值设定项

标签 c++ algorithm pointers iterator stdarray

我正在尝试使用 clang 11.0.1 编译此代码, , 适用于 PS4 平台。 some_arraystd::array初始化为 std::array<char, 48> some_array{{}};

auto* const characters = std::remove(some_array.begin(),
                        some_array.begin() + length, filtered_character);

我收到以下错误

'auto *const' has incompatible initializer of type std::_Array_iterator<char, 48>

我不确定是否需要使用 cmake 或与逻辑有关的东西来抑制警告。

最佳答案

std::remove返回 forward iterator ,而不是指针

template< class ForwardIt, class T >
ForwardIt remove( ForwardIt first, ForwardIt last, const T& value );
^^^^^^^^^^

在你的情况下,它是类型

std::array<char, 48>::iterator

因此,您不需要添加 auto*,而是让编译器为您推断类型。所以你只需要 auto :

auto characters = std::remove(some_array.begin()
    , some_array.begin() + length
    , filtered_character);

为了验证类型。 see here

#include <type_traits> // std::is_same_v

auto characters = std::remove(some_array.begin()
    , some_array.begin() + length
    , filtered_character);

static_assert(std::is_same_v<decltype(characters), std::array<char, 48>::iterator>
    , "Are not same!");

作为旁注,算法 std::remove 实际上不会删除任何元素,而只会将它们移动到序列的末尾,这样,所有“删除”元素落在你范围内的某个边界之后。

如果您的意图是删除元素,您应该考虑诸如 std::vector 之类的容器。 , std::list等与 erase–remove idiom或者干脆std::erase(Since C++20) . It is not possible with std::array

关于c++ - 'auto *const' 具有 std::_Array_iterator<char, 48> 类型的不兼容初始值设定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68643140/

相关文章:

algorithm - 遗传算法代码中的排序选择

c void 指针数组打印

c++ - 如何在单次迭代中使用 C++ Pgm 中的指针查找字符串段落中单词的出现次数?

c++ - 使用带有静态 constexpr 的模板类时如何修复链接错误?

c++ - x86-64 movl 和 cmpl 区别

java - 益智游戏安卓DFS算法

ios - 查找关闭多边形 iOS 的总数

c++ - `const std::shared_ptr<...>' 的使用计数是否可变?

c++ - 在我的 MacOS 应用程序中禁用 "Show Help Menu"快捷方式

ios - NSBundle在加载nib文件时如何设置指针来查看实例变量中的对象?