Từ 1 tới 10 trên tổng số 10 kết quả

Đề tài: Lập trình C | Tạo và sử dụng một mảng động trong lập trình C

  1. #1
    Ngày gia nhập
    03 2007
    Bài viết
    2

    Mặc định Lập trình C | Tạo và sử dụng một mảng động trong lập trình C

    Có ai làm ơn chỉ giúp mình làm thế nào để tạo và sử dụng một mảng động trong C, C++ được ko. Yêu cầu ở đây là:
    - Mảng có số phần tử bất kì, có thể thêm bớt phần tử thoải mái (trong lúc chạy chương trình)
    - Mảng có các phần tử có kiểu bất kì,kể cả mảng, string, struct, etc.(cái này chỉ là phụ)

    Nếu ai có sách về vấn đề này thì share cho mình voi nhé. Mình đang muốn điên cái đầu với nó rồi.

  2. #2
    Ngày gia nhập
    01 2007
    Bài viết
    412

    Trích dẫn Nguyên bản được gửi bởi kand Xem bài viết
    Có ai làm ơn chỉ giúp mình làm thế nào để tạo và sử dụng một mảng động trong C, C++ được ko. Yêu cầu ở đây là:
    - Mảng có số phần tử bất kì, có thể thêm bớt phần tử thoải mái (trong lúc chạy chương trình)
    - Mảng có các phần tử có kiểu bất kì,kể cả mảng, string, struct, etc.(cái này chỉ là phụ)

    Nếu ai có sách về vấn đề này thì share cho mình voi nhé. Mình đang muốn điên cái đầu với nó rồi.
    - Yêu cầu thứ 1 của cậu: có lẽ C/C++ chưa hỗ trợ tính năng co giãn số lượng tối đa của mảng. Nếu muốn có mảng động, cậu nên dùng danh sách liên kết, như thế sẽ không bị giới hạn về số lượng phần tử.
    - Yêu cầu 2:mỗi mảng chỉ có 1 kiểu thôi chứ, làm gì biến đổi kiểu lung tung như vậy nhỉ?

  3. #3
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Uhm ! Với câu một thì cũng có thể chứ nhỉ ? Nhưng mà rất là dở thôi !

    Ý tưởng là có 1 hàm kiểm tra xem giá trị đang nhập so với mức độ cho phép nhập có bằng nhau chưa ? Nếu bằng thì cấp phát thêm cho nó ? còn chưa thì cứ tiếp tục

  4. #4
    Ngày gia nhập
    01 2007
    Bài viết
    412

    Trích dẫn Nguyên bản được gửi bởi kidkid Xem bài viết
    Uhm ! Với câu một thì cũng có thể chứ nhỉ ? Nhưng mà rất là dở thôi !

    Ý tưởng là có 1 hàm kiểm tra xem giá trị đang nhập so với mức độ cho phép nhập có bằng nhau chưa ? Nếu bằng thì cấp phát thêm cho nó ? còn chưa thì cứ tiếp tục
    Hi,ý tưởng cũng hay đó chứ, giả sử mảng động này ban đầu có n phần tử, khi nhập vào thì tăng biến dem lên 1, nếu biến dem đụng trần (tức dem=n) thì bảo cái hàm đó làm ơn tăng n lên 1. Cũng là 1 ý hay, nhưng dù gì dùng DSLK vẫn hơn

  5. #5
    Ngày gia nhập
    11 2006
    Bài viết
    75

    Code:
    //STL and Boost Library are two powerful and useful C++ libs, and
    //they are all that you need. 
    
    //For the first question, you can select:
        
        //vector (#include <vector>) if your insertions are at the end of your container only
        //deque (#include <deque>) if ...at both the beginning and the end of your container
        //list (#include <list>) if ...at the middle of your container (note: list is essentially a double-linked list). 
        
    //For the second question, you can solve this problem 
    //by using boost::any or boost::variant. 
    
    //Here is a sample code
    
    #define _STLP_DEBUG //commnent if not using STLport
    #define _STLP_THREADS //comment if not using STLport
    
    #include <cstdlib>
    #include <iostream>
    #include <vector>
    #include <string>
    #include <utility>
    #include <boost/variant.hpp>
    #include <boost/any.hpp>
    
    using std::cout;
    using std::wcout;
    using std::endl;
    using std::vector;
    using std::string;
    using std::wstring;
    using std::for_each;
    using boost::any;
    using boost::variant;
    
    typedef variant <int, string, wstring, double> _four_in_one;
    typedef vector <_four_in_one> _four_in_one_container;
    typedef vector <any> _anything_container;
    
    void printFourInOneElement (_four_in_one& anElement);
    void printAnythingElement (any& anElement);
    
    int main(int argc, char *argv[])
    {
        _four_in_one_container theArray;
        _anything_container anotherArray;
        
        theArray.push_back (1);
        theArray.push_back (string("Two"));
        theArray.push_back (wstring(L"Three"));
        theArray.push_back (4.25);
        
        cout << "Now we show the content of \"4in1\" array." << endl;
        for_each (theArray.begin(), theArray.end(), printFourInOneElement);
        cout << "--------------------------" << endl;
        cout << "That's all!\n" << endl;
        
        anotherArray.push_back (1);
        anotherArray.push_back (string("Two"));
        anotherArray.push_back (wstring(L"Three"));
        anotherArray.push_back (4.25);
        
        cout << "Now we show the content of \"anything\" array." << endl;
        for_each (anotherArray.begin(), anotherArray.end(), printAnythingElement);
        cout << "--------------------------" << endl;
        cout << "That's all!" << endl;
        
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    
    void printFourInOneElement (_four_in_one& anElement)
    {
        cout << "--------------------------" << endl;
        if (int *anInt = boost::get<int> (&anElement))
        {
            cout << "This is an integer number" << endl;
            cout << "Its value is: " << *anInt << endl;
        }
        else if (string *aString = boost::get<string> (&anElement))
        {   
            cout << "This is a string" << endl;
            cout << "Its content is: " << *aString << endl;
        }
        else if (wstring *aWString = boost::get<wstring> (&anElement))
        {
            wcout << L"This is a wide string" << endl;
            wcout << "Its content is: " << *aWString << endl;
        }
        else if (double *aDouble = boost::get<double> (&anElement))
        {
            cout << "This is a double number" << endl;
            cout << "Its value is: " << *aDouble << endl;
        }
    }
    
    void printAnythingElement (any& anElement)
    {
        cout << "--------------------------" << endl;
        if (int *anInt = boost::any_cast<int> (&anElement))
        {
            cout << "This is an integer number" << endl;
            cout << "Its value is: " << *anInt << endl;
        }
        else if (string *aString = boost::any_cast<string> (&anElement))
        {   
            cout << "This is a string" << endl;
            cout << "Its content is: " << *aString << endl;
        }
        else if (wstring *aWString = boost::any_cast<wstring> (&anElement))
        {
            wcout << L"This is a wide string" << endl;
            wcout << "Its content is: " << *aWString << endl;
        }
        else if (double *aDouble = boost::any_cast<double> (&anElement))
        {
            cout << "This is a double number" << endl;
            cout << "Its value is: " << *aDouble << endl;
        }
        else cout << "I'm sorry but I can't determine the data type." << endl;
    }
    Our dreams are young and we both know they take us where we want to go...

  6. #6
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Mặc định Lập trình C | Tạo và sử dụng một mảng động trong lập trình C

    DSLK ? Cũng hay đấy , nghe tên này hoài mà chưa học được để coi thử ? Neverland nếu có code thì post lên thử xem !

  7. #7
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  8. #8
    Ngày gia nhập
    01 2007
    Bài viết
    412

    Trích dẫn Nguyên bản được gửi bởi kidkid Xem bài viết
    DSLK ? Cũng hay đấy , nghe tên này hoài mà chưa học được để coi thử ? Neverland nếu có code thì post lên thử xem !
    Vấn đề này đã được mấy sư huynh đi trước giải thích và ghi code cài đặt, cụ thể là anh PoPoPoPo, kid tham khảo bài viết của anh ấy trong diễn đàn á, neverland không có khiếu sư phạm cho lắm, chỉ sợ viết ra càng khiến kid khó hiểu hơn ấy chứ.

  9. #9
    Ngày gia nhập
    03 2007
    Bài viết
    2

    Thanks, thanks cac anh em nhieu nhieu. Thuc ra sau khi post len forum, em da search Google, va da tim ra 1 cach kha hay de giai quyen van de nay, do la dung vector, nhu anh(hay chi ) ilovecplusplus da de cap. Nhung cung theo ho noi thi su dung vector se lam cham chuong trinh, rat ton bo nho, ... noi chung la ko nen dung cho lam. Voi lai cach su dung vector cung con nhieu cai kho nam bat, nen em cung chi xai so so, chu chua ung dung nhieu.
    Thuc ra cai van de nay bat nguon tu bai toan nay: "Tim day tang dai nhat trong 1 mang cho truoc". No cung chang co gi la kho, neu su dung de quy, nhung sau moi buoc de quy thi em lai mat het dau vet, nen em thu nghi den dung mang dong. Neu bai nay duoc giai trong Python(www.python.org) thi chi ton khoang 30 phut thoi - vi no ho tro rat tot cac cau truc du lieu dong - em da ko vat va the nay. Em dang co gang ko dung de quy ma chuyen sang dung vong lap, va dang.. vo cung vo vong. Cac bac giup em giai bai nay voi. Em dang mat an mat ngu voi no roi.
    A, bac nao muon tim hieu ve Python thi vao homepage cua no ma tim hieu nhe. Em rat thich cai mon nay, nhung ma.. thi ko su dung cai nay, nen chac hoc chi de ung dung sau nay thoi. Ai cung chi huong voi em thi mail cua em day: wakandan@gmail.com. Gui thu cho em nhe cac bac.

  10. #10
    Ngày gia nhập
    08 2006
    Nơi ở
    TpHCM
    Bài viết
    202

    đang định khuyên dùng vector thì đã tìm ra rồi


    Nhung cung theo ho noi thi su dung vector se lam cham chuong trinh, rat ton bo nho, ... noi chung la ko nen dung cho lam
    đoạn này thì hết sức bậy bạ. Cậu phải tìm hiểu kỹ về cấu trúc dữ liệu của nó rồi sẽ thấy. Vector nhanh nhất trong các lọai cấu trúc dữ liệu (về tác vụ truy suất) nếu cậu biết dùng (ước lượng cho đúng số phần tử có thể có của nó)
    Ngoài ra có 1 Ưu điểm rất quý đó là cậu có thể thực hiện <b>quick sort </b>trên nó rất nhanh

    Vậy thì nó chậm khi nào? Khi nó thực hiện expand space, như mình đã nói ở trên thì nếu cậu dùng tốt thì sẽ rất ít khi cần làm tác vụ này

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn