我正在尝试删除与特定情况匹配的数组的所有元素.例如..
如果(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
整个问题在这里找到: 切割棒
你可以使用这个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; }
希望能有所帮助.