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

Đề tài: Mảng có chỉ số âm trong C++?

  1. #1
    Ngày gia nhập
    02 2009
    Bài viết
    10

    Mặc định Mảng có chỉ số âm trong C++?

    theo lý thuyết thì phần tử đầu tiên trong mảng là phần tử 0 ( ví dụ như a[0]) các bạn cho mình hỏi làm thế nào để khai báo được phần tử -1 (a[-1]) không vì mình quen dùng pascal nó hỗ trợ cả vị trí phần tử âm để tiện sử dụng mà

  2. #2
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    a[-1] tức là phần tử cuối cùng phải không?
    thế thì xoay ngược ra

    C++ Code:
    1. 1. lấy độ dài mảng:
    2. length = sizeof(array) / sizeof(array_type);
    3.  
    4. 2. lấy giá trị phần tử cuối
    5. array[length - 1]
    None!

  3. #3
    Ngày gia nhập
    03 2008
    Bài viết
    12

    Hì hì, mình hiểu ý bạn rồi.
    Code:
    #include <iostream.h>
    
    template <class T, int begin, int length>
    class ARRAY
    {
    	protected:
    		T	*pT;
    	public:
    		ARRAY()
    		{
    			pT = new T[length];
    		}
    
    		~ARRAY()
    		{
    			delete []pT;
    		}
    
    		friend	T *operator *(ARRAY <T, begin, length> &x)
    		{
    			return x.pT;
    		}
    
    		T	&operator[](int i)
    		{
    			if (i<begin || i> begin+length)
    				return *(int *) 0;// Xam pham se bi loi chuong trinh
    			return	pT[i - begin];
    		}
    };
    
    void main()
    {
    	ARRAY <int, 1, 10> Arr;
    	for (int i=0; i< 10; i++)
    	{
    		Arr[i+1]=i;
    	}
    	cout << Arr[3];
    }
    lưu ý lời gọi ARRAY <int, 1, 10> tức là khai báo một mảng có 10 phân tử, phần tử bắt đâu là 1. Bạn có thể xem lại ở chỗ cấp phát bộ nhớ, nó cũng chỉ cấp 10 phần tử thôi, chuơng trình bạn sẽ bị sai nếu gọi Arr[0] do nó lấn vùng nhớ của mấy cái khác, cái này không phải của nó. Số âm như bạn nói cũng OK tuốt.
    Đã được chỉnh sửa lần cuối bởi dragon111989 : 01-05-2009 lúc 01:02 AM. Lý do: Không có trích dẫn

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