c++ - 您可以将指针转换为数组吗?

标签 c++ c++11

我有一个指针“a”,它是 A* 类型。我现在在那个地址有 n 个 A 类型的对象,我想遍历它们。

我想将它转换为 A[n],这样我就可以使用 c++11 range-for 并编写 for (auto temp : a){...} . 当然,我可以用经典for(int i=0; i<n; i++) {temp=a[i]; ...}但是 range-for 更干净。

最佳答案

合理的代码中,我会回避它。但是 C++ 允许你做出纯粹邪恶的行为。本着这种精神,我提供了一个解决方案:

以相当大的混淆为代价,您可以编写一些准备模板:

namespace std
{
    template <typename T> T* begin(std::pair<T*, T*> const& a)
    {
        return a.first;
    }

    template <typename T> T* end(std::pair<T*, T*> const& a)
    {
        return a.second;
    }
}

然后你可以这样写

for (auto&& i : std::make_pair(a, a + n)){

}

模板内容引入了 beginend 的适当定义,这是范围 for 循环所需要的。

关于c++ - 您可以将指针转换为数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43256092/

相关文章:

c++ - 非原子对象在所有线程中是否具有相同的修改顺序? (在没有数据竞争的情况下)

c++ - 为 SFINAE 测试仪提供默认值零的原因是什么?

c++ - C++中 vector 错误的解决方案是什么?

c++编码选择开关代码上的每个案例

C++11 基于数组的哈希 : Auto not looping

c++ - 如何从 svg 读取 boost::geometry::model::polygon

C++类成员作为数组,打包失败案例

c++ - 直接在 Rcpp 中使用 (c)igraph(即不通过 R)

c++ - "missing type specifier"构造函数声明错误

c++ - 在 BOOST Graph 中过滤现有的 filtered_graph