تبدیل آرایه استاتیک به vector - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

تبدیل آرایه استاتیک به vector

+3 امتیاز
138 بازدید
سلام به دوستان گلم.

چطور باید یک آرایه استاتیک را به یک vector تبدیل کرد؟(البته بدون کپی کردن)
سوال شده دی 3, 1393  بوسیله ی Xavi (امتیاز 890)   2 14 78

3 پاسخ

+3 امتیاز

بدون کپی کردن راهی وجود نداره (چون هر کاری هم که انجام بدیم چون فضای حافظه وکتور داخل heap هست و آرایه روی stack حتما یک بار باید کپی انجام بشه .)

برای ساخت وکتور از روی آرایه 2 تا کار میشه انجام داد :

int arr[3] = {1, 2, 3};
std::vector<int> vec(std::begin(arr), std::end(arr));

//ya
std::vector<int> vec(sizeof(arr)/sizeof(arr[0]));
std::copy(std::begin(arr), std::end(arr)),vec.begin());

 

پاسخ داده شده دی 6, 1393 بوسیله ی BlueBlade (امتیاز 15,742)   13 17 85
+2 امتیاز

آقا جون با راههای زیادی میشه این کاررو انجام داد کاش سلوشن دقیقو میگفتین اما من یه موردشو میگم

#include <iostream>
#include <iterator>
#include <vector>

using namespace std;

int main()
{
    int arr_s[]={1,2,3,4,8,9,10};
    vector<int> arr_v(begin(arr_s),end(arr_v));
    
    cout << arr_v.at(5) << endl << arr_v.size() << endl;
    cout << endl;
    for(auto a : v){
        cout << a << endl;
    }
    return 0;
}

 

این یه راه سادش هست اما برای اینکار باید از استاندارد سی پلاس 11 به بالا استفاده کرد

پاسخ داده شده دی 4, 1393 بوسیله ی Fire360Boy (امتیاز 3,342)   3 18 42
چه توهینی
یادم نمیاد چی بوده ولی مطمئیناً
اصلا قصد توهین نبوده
ویرایش میکردی خوب
حواست باشه بچه های شیراز باهوش تره این حرف ها هستن :) نباید باهاشون کل کل کنی!!!!

قبول کن بابا همون توی DELETE[] هم داره delete صدا زده میشه
اون کدارو که از خودم نزاشتم کپیش کن یه جا نگاش کن از توی msvcrt درآوردم!!!
آهان پس بگو چرا این قدر 2 تا [] مهمه  
بخاطر شیرازی بودنه آدم خسته میشه 2 تا [] اضافه بنویسه :))))
من نمی خواستم کل کل کنم کلا گفتم کامپایلر هایی هستن که []delete رو به اون شکل بر حسب delete پیاده سازی نمی کنن که در اون صورت یا برنامه کرش می کنه یا memory leak داریم
عجب!!!!
پاکش کردم D:
کامنتارو هم تغییر دادم
این بحث به جایی نمیرسه :)
+2 امتیاز

البته اینجوریم بدون 11 میشه استفاده کرد

با توجه به overload سوم vector که در آدرس زیر هست میشه

http://www.cplusplus.com/reference/vector/vector/vector/

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    int arr_s[]={1,2,3,4,8,9,10};
    vector<int> arr_v(arr_s,arr_s+ sizeof(arr_s)/sizeof(arr_s[2]));
    
    cout << "size : " << arr_v.size() << endl;
    for(int i=0 ; i<arr_v.size(); i++){
        cout << arr_v[i] << endl;
    }
    cout << arr_s[2];
    return 0;
}

 

البته باید توجه داشت که اینجوری کل آرایه هارو میریزه مثلا اگه یه آرایه 100 تایی داشته باشیم و فقط چهارتای اولش اینیشیالایز شده باشه این کد هر صدتا عنصررو تبدیل به وکتور میکنه توی کد قبلی هم همین کاررو میکنه

پاسخ داده شده دی 4, 1393 بوسیله ی Fire360Boy (امتیاز 3,342)   3 18 42
...