حذف چند عنصر پشت سر هم از آرایه - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

حذف چند عنصر پشت سر هم از آرایه

+1 امتیاز

چطور میشه چند تا عنصر از آرایه رو پاک کرد  ؟

int arr[5] = {1, 2, 3, 4, 5}; -->>‌ {1,4,5}

ممنون.

سوال شده فروردین 11, 1393  بوسیله ی dark (امتیاز 27)   2 3 3
دوباره تگ گذاری شد فروردین 11, 1393 بوسیله ی BlueBlade

2 پاسخ

+3 امتیاز
 
بهترین پاسخ

بهتره که از memmove استفاده کنید چون از کپی کردن آرایه و ساختن آرایه جدید  یا شیفت کردن عناصر  به مراتب سریع تره .

#include <memory>

int main()
{
    const int mSize=5;
    int arr[mSize] = {1, 2, 3, 4, 5};
    memmove(arr+1,arr+3,(mSize - 2) * sizeof(int));

    for(int i=0;i<mSize-2;i++)
    {
        printf("%d\t",arr[i]);
    }
}

کاری که memmove می کنه اینه که محتوای خونه سوم رو انتقال میده به بعد از خونه اول

البته دقت کنین که استفاده از memmove روی آرایه ای که از کلاس ساختین یا آرایه ای که به جای malloc از new برای ساختش استفاده شده مشکل سازه .

 

توی ++C بهتره که از std::vector یا std::list یا std::array به جای آرایه معمولی استفاده کنین .

#include <vector>
#include <iostream>

int main()
{
    std::vector<int> vec{1,2,3,4,5};

    vec.erase(vec.begin()+1,vec.end()-2);

    for(const auto& i : vec)
        std::cout<<i<<'\t';
}

 

پاسخ داده شده فروردین 11, 1393 بوسیله ی MsM (امتیاز 108)   3 4 13
انتخاب شد فروردین 11, 1393 بوسیله ی dark
+3 امتیاز
اول اینکه آرایه شما توی Stack ساخته شده .

و نمیتونید اندازه ی اون رو تغییر بدید . نه اینکه نتونید . اگر تغییر بدید برنامه دچار مشکل میشه .

نسبت به چیزی که شمل میخواهید شما باید آرایه رو با malloc در حافظه ی Heap درست کنید .

یه روش اینه که عناصری که میخواهید پاک کنید رو به انتهای آرایه ببرید و سپس با تابع realloc اندازه ی جدیدی رو که تعداد عناصر کمتری داره به آرایه بدید .

یا میتونید . یک آرایه دیگه درست کنید و عناصر مورد نظر رو در اون آرایه کپی کنید و سپس آرایه قبلی رو پاک کنید .
پاسخ داده شده فروردین 11, 1393 بوسیله ی Ali Rahbar (امتیاز 4,240)   6 16 46
...