我有一个指针“a”,它是A *类型。我现在在该地址有n个类型为A的对象,我想迭代它们。
我想把它转换为A [n],这样我就可以使用c ++ 11 range-for和write for (auto temp : a){...}
。
当然,我可以使用经典for(int i=0; i<n; i++) {temp=a[i]; ...}
,但范围更清晰。
答案 0 :(得分:5)
是的,你可以做。
// allocate an array of one int[2] dynamically
// and store a pointer to it
int(*p)[2] = new int[1][2];
// now initialize a reference to it
int(&array)[2] = *p;
// delete the array once you no longer need it
delete[] p;
答案 1 :(得分:1)
在合理的代码中,我回避它。但是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)){
}
模板内容带来begin
和end
的合适定义,这是for
范围循环所必需的。