当前位置:  开发笔记 > 编程语言 > 正文

在给定if条件的情况下,如何删除整数数组中的特定元素?

如何解决《在给定if条件的情况下,如何删除整数数组中的特定元素?》经验,为你挑选了1个好方法。

我正在尝试删除与特定情况匹配的数组的所有元素.例如..

如果(AR [I] == 0)

删除数组中0的所有元素

删除后打印出剩余数组的元素数

我试过的:

if(ar [i] == 0)

   {
       x++;
  }
   b=N-x;

   cout<

这只有在我想每次都删除一个元素并且我无法弄清楚如何在我的必要情况下删除时才有效.我假设我需要遍历数组并选择找到的元素的所有实例并删除所有出现的实例.对于一次出现只有一次递增"x"变量,是否可以在一定次数的情况下将其递增一定次数?

编辑(有人要求我粘贴我的所有代码):

int N;
cin>>N;
int ar[N];

int i=0;
while (i>ar[i];
    i++;

}//array was created and we looped through the array, inputting each element.


int a=0;
int b=N;
cout<ar[i]) {  //we selected the smallest element.
        a=ar[i];

        }

    i=0;
    while (i

整个问题在这里找到: 切割棒



1> txtechhelp..:

你可以使用这个std::remove功能.

我打算写一个示例来使用链接,但链接的示例形式几乎是我要发布的内容,所以这里是链接中的示例:

// remove algorithm example
#include      // std::cout
#include     // std::remove

int main () {
    int myints[] = {10,20,30,30,20,10,10,20};      // 10 20 30 30 20 10 10 20

    // bounds of range:
    int* pbegin = myints;                          // ^
    int* pend = myints+sizeof(myints)/sizeof(int); // ^                       ^

    pend = std::remove (pbegin, pend, 20);         // 10 30 30 10 10 ?  ?  ?
                                                   // ^              ^
    std::cout << "range contains:";
    for (int* p=pbegin; p!=pend; ++p)
        std::cout << ' ' << *p;
    std::cout << '\n';

    return 0;
}

严格来说,发布的示例代码可以优化为不需要指针(特别是如果您使用任何标准容器类型,如a std::vector),并且还有一个std::remove_if函数允许为更复杂的谓词逻辑传递其他参数.

但是,你提到了Cut the sticks challenge,我不相信你实际上需要使用任何删除功能(超出正常的容器/数组删除功能).相反,您可以根据挑战中设置的条件使用类似以下代码的内容来"切割"和"删除"(即从棍子中剪切X,然后在<0时删除并打印每次传递的剪切数量):

#include 
#include 

int main () {
    // this is just here to push some numbers on the vector (non-C++11)
    int arr[] = {10,20,30,30,20,10,10,20}; // 8 entries
    int arsz = sizeof(arr) / sizeof(int);
    std::vector vals;
    for (int i = 0; i < arsz; ++i) { vals.push_back(arr[i]); }
    std::vector::iterator beg = vals.begin();
    unsigned int cut_len = 2;
    unsigned int cut = 0;
    std::cout << cut_len << std::endl;
    while (vals.size() > 0) {
        cut = 0;
        beg = vals.begin();
        while (beg != vals.end()) {
            *beg -= cut_len;
            if (*beg <= 0) {
                vals.erase(beg--);
                ++cut;
            }
            ++beg;
        }
        std::cout << cut << std::endl;
    }
    return 0;
}

希望能有所帮助.

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有