【问题标题】:Regular loop to Pointer loop conversion, how? [closed]常规循环到指针循环转换,如何? [关闭]
【发布时间】:2021-01-18 12:28:57
【问题描述】:
SomeClass* stuff;
int N = 10;
stuff = new SomeClass[N];

Someclass* objectPtrDelete = null;

int i = 0;
for(Someclass* pointer = begin(); pointer != end(); pointer++)
{
    if(pointer->getSomeAttr() == randomPointer.getSomeAttr()){
        objectPtrDelete = pointer;
        break;
    }
    i++;
}
    
// Shrinking the C-array with this for loop, shifting left
for (int j = i; j < N-1; j++)
    stuff[j] = stuff[j + 1];

能否将最后一个循环转换为Pointer循环,如果可以,如何正确完成?请注意,这些名称是虚构的,即虚构的东西。我已经实现了类似的东西,但是,我想了解如何将最后一个循环转换为执行相同操作的循环指针。

做这个:

for (int j = i; j < N-1; j++)
    stuff[j] = stuff[j + 1];

进入一个指针循环。

【问题讨论】:

  • 什么是“指针循环”?
  • 我不知道,stackoverflow.com/questions/33829566/for-loop-with-pointer-in-c。但是,它是正确的吗?你就是这样做的吗?
  • 如果你使用指针而不是索引没有太大的变化。您只需要弄清楚您使用什么作为条件(大概类似于ptr != a + N 并确保您在正文中正确取消引用。
  • @Albin M This int[] a = new int[N] 不是有效的 C++ 记录。
  • 我有一个指针数组,SomeClass* stuff; 这是发起的:stuff = new SomeClass[10];

标签: c++ loops for-loop pointers


【解决方案1】:

(编辑以考虑您的更改)

如果我很明白你想要什么,拥有

SomeClass* 的东西;

你可以替换

for (int j = i; j < N-1; j++)
   stuff[j] = stuff[j + 1];

通过

for (SomeClass * p =  stuff + i; p < stuff + N-1; p++)
    *p = *(p + 1);

或轻松管理有关类型的更改:

for (auto p =  stuff + i; p < stuff + N-1; p++)
    *p = *(p + 1);

【讨论】:

  • 布鲁诺,看看我的更新。很抱歉没有早点澄清。
  • @AlbinM 我更新了我的答案,只是类型和名称发生了变化
  • Bruno,那还会缩小数组吗?
  • 您的代码令人困惑,int j 现在在哪里?
  • @AlbinM 你是什么意思shrink the array ?它的大小不变,你只需移动元素
【解决方案2】:

对于初学者来说,这个结构(没有结束分号)

int[] a = new int[N]

在 C++ 中无效。

应该是这样的

int *a = new int[N];

如果我正确理解了您的问题,您的意思类似于以下内容

for ( auto prev = a, next = a + 1; next != a + N; ++next )
{
    *prev++ = *next;
}

【讨论】:

  • 弗拉德,看看我的更新。很抱歉没有早点澄清。
  • @AlbinM 发生了什么变化?
  • @VladfromMoscow 只是数组的类型和变量的名称
猜你喜欢
  • 2020-01-22
  • 1970-01-01
  • 1970-01-01
  • 2016-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多