الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

جدول ديناميكي قياسي

بدأه fouad2008 في 13 ديسمبر 2011 · 6 رد · 2,195 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اولا انا خبرتي في سي ضئيلة

حاولت تقليد الدالة SetLength كما في دلفي .التي تقوم بتهيئة الجداول اي كان نوعها

طبعا هناك بدائل في سي بلاس بلاس مثل vector . لكني اردت ان استخدم malloc و realloc

template <typename T>
void SetLength(T * t , int len)
{
	if (!t)
		t = (T*)malloc(len*siezof(T));
	else
		t = (T*)realloc(t , len*sizeof(T));
}

ارجو المساعدة في تصحيح الكود

تم تعديل هذه المشاركة بواسطة fouad2008 في 13 ديسمبر 2011 في 16:45

#2

لما تستخدم malloc و realloc التابعين للسي داخل كود سي بلس بلس يتم إستخدام ال templates فيه؟ ليست هذه طريقة جميلة أبداً لكتابة كود

أيضاً عن الإنتقال من لغة إلى أخرى ، لا تحاول أن تكتب كود اللغه القديمة بإستخدام الSyntax الخاص باللغه الجديده ، حاول أن تتعلم الفلسفة وراء اللغه الجديده أولاً لكي تستغل امكانياتها جيداً و بصورة جميلة

#3

هذا الكود يعمل معى بنجاح وبدون مشاكل فى بيئة كود بلوك-ابينتو 11.10

#include <iostream>
#include <stdlib.h>
using namespace std;

template <typename T>
void SetLength( T *t , int len)
{
    if (!t)
        t = (T *) malloc(len * sizeof(T));
    else
        t = (T*)realloc(t , len*sizeof(T));
}
int main(void)
{
    return 0;
}

أذا كانت هناك اخطاء اذكرها

تم تعديل هذه المشاركة بواسطة محمد ابوزايد في 13 ديسمبر 2011 في 17:30

post-15367-027053900%201340345097.gifpost-15367-087183200%201340344597.gif
post-247365-0-10080400-1379403554_thumb.

#4
اقتباس
ليست هذه طريقة جميلة أبداً لكتابة كود

معك حق . لكني حاولت بستخدام *void ولم تنجح .

اقتباس
هذا الكود يعمل معى بنجاح وبدون مشاكل فى بيئة كود بلوك-ابينتو 11.10

انت لم تستدعي الدالة بعد في main . لذلك لم ترى الخطأ

#5

أنا حاولت ان اصحح الكود من وجهتة نظرك انت على نفس المسار الذى كودتة انت.

من الطبيعى ان ترجع الدالة setLength مؤشر للمكان الذى احتجزتة فى الذاكرة

ومن ايضا من الطبيعة ان نستخدم كلمة new بدﻻ من malloc ............ الخ.

post-15367-027053900%201340345097.gifpost-15367-087183200%201340344597.gif
post-247365-0-10080400-1379403554_thumb.

#6

السلام عليكم

لقد عدلت الكود ووضعت بعض الأمتلة حول كيفية إستخدام الدالة SetLength

#include <iostream>
#include <cstdlib>
using namespace std;
template <typename T>
T * SetLength( T * t, int len)
{
	t = (T*) realloc(t , len * sizeof(t));
	return t;
}
int main(int argc, char *argv[])
{
    // we declare pointers to  point to our arrays
    int * intPointer = NULL;
    char * charPointer = NULL;


    // craeate blocks of memory
    intPointer = SetLength <int> (intPointer, 3);
    charPointer = SetLength <char> (charPointer, 2);

    charPointer[0] = 'f';
    charPointer[1] = 'c';

	intPointer[0] = 14;
	intPointer[1] = 1;
	intPointer[2] = 11;

	//Loop for displaying int array
	for( int a = 0; a < 3; a++)
	{
	    cout << intPointer[a] << endl;
	}

	//Loop for displaying char array.
    for(int itr = 0; itr < 2; itr++)
    {
        cout << charPointer[itr] << endl;
    }


	return 0;
}
1
#7

مشكور اخ biginner2000 على الاجابة

لكن لا ادري ان كانت realloc تستدعي ال constructor للاصناف ام لا

سأجرب ذالك لاحقا.

شكرا مرة اخرى

مواضيع مشابهة