MFC动态数组CArray

 

复制代码
    CArray<int, int> myArray; // 创建 CArray 对象
    //第一个int表示数组的元素类型,而第二个int表示索引类型

    INT_PTR sy=myArray.Add(1);  //在数组末尾添加一个新元素
    //返回值:所添加的元素的索引

    sy = myArray.Add(2);
    CArray<int, int> myArray1;
    sy = myArray1.Add(11);
    sy = myArray1.Add(22);

    sy=myArray.Append(myArray1); //可将一个数组的内容添加到另一个数组的末尾
    //返回值:第一个追加的元素的索引

    CArray<int, int> myArray2;
    myArray2.Copy(myArray); //将一个数组的元素复制到另一个数组
    int n = myArray2.GetAt(1); //返回指定索引处的数组元素
    int element = myArray2.ElementAt(1); // 获取指定位置的元素
    /*
    CArray::ElementAt 和 CArray::GetAt 都是用于获取 CArray 对象中指定位置的元素值的方法,它们的区别在于以下几点:
    参数类型:ElementAt 方法的参数类型是数组的索引类型,而 GetAt 方法的参数类型是整数。
    范围检查:ElementAt 方法会进行范围检查,确保访问的索引在有效范围内。如果索引超出了数组的有效范围,ElementAt 方法会引发一个断言(assertion)以进行调试。
                相反,GetAt 方法不进行范围检查,如果索引超出了数组的有效范围,它将返回未定义的结果。
    返回值类型:ElementAt 方法返回指定位置元素的值,而 GetAt 方法返回指定位置元素的引用。如果只需要获取元素的值,可以使用 ElementAt 方法;
            如果希望修改元素的值,可以使用 GetAt 方法并将其作为左值。
    */


    
    int& n1= myArray2.GetAt(1);  
    //注意:引用变量
    n1 = 20;
    //修改值
    int m= myArray2.GetAt(1);
    //m=20了,说明通过引用变量修改了值

    n = myArray1.GetCount(); //返回数组元素的数目
复制代码

 

复制代码
    CArray<int, int> myArray; 
    myArray.Add(10); // 向数组添加元素
    myArray.Add(20);
    myArray.Add(30);
    myArray.FreeExtra();//释放没有使用的空间

    int* p = myArray.GetData();//获取 CArray 对象中元素的指针
    //返回一个指向数组内存区域的指针,通过该指针可以直接访问和修改数组中的元素

    int n = p[1];  //通过指针获取元素值
    p[1] = 200;   //通过指针修改值
    n = p[1];
复制代码

 

    CArray<int, int> myArray; 
    myArray.Add(10); 
    myArray.Add(20);
    myArray.Add(30);
    
    int n = myArray.GetSize(); //获取此数组中的元素数
    n = myArray.GetUpperBound();//返回最大的有效索引

 

复制代码
    CString str;
    CArray<int, int> myArray;
    myArray.Add(1); 
    myArray.Add(3); 

    myArray.InsertAt(1, 2);   // 在索引为 1 的位置插入元素 2

    for (int i = 0; i < myArray.GetSize(); i++) {
        str.Format(_T("i=%d  :%d    \n"), i,myArray.GetAt(i));
        ::OutputDebugString(str);

    }

    myArray.RemoveAll();  //从此数组中移除所有元素
    BOOL b = myArray.IsEmpty();//是否为空
    //返回值:如果数组不包含任何元素,则为非零;否则为 0

    myArray.Add(10);
    myArray.Add(30);
    myArray.Add(11);
    myArray.Add(31);

    myArray.RemoveAt(2);  //删除指定索引处元素

    for (int i = 0; i < myArray.GetSize(); i++) {
        str.Format(_T("i=%d  :%d    \n"), i, myArray.GetAt(i));
        ::OutputDebugString(str);

    }

    myArray.RemoveAll();

    myArray.Add(10);
    myArray.Add(20);
    myArray.Add(30);
    myArray.Add(40);
    myArray.Add(50);
    myArray.Add(60);
    myArray.Add(70);
    myArray.Add(80);


    myArray.RemoveAt(2,3); //从序号2开始,连续删除3个元素

    for (int i = 0; i < myArray.GetSize(); i++) {
        str.Format(_T("i=%d  :%d    \n"), i, myArray.GetAt(i));
        ::OutputDebugString(str);

    }
复制代码

 

复制代码
    CString str;
    CArray<int, int> myArray;
    myArray.Add(1); 
    myArray.Add(3); 

    myArray.SetAt(1,2); //索引1的值修改为2,不允许对该数组进行扩展
    for (int i = 0; i < myArray.GetSize(); i++) {
        str.Format(_T("i=%d  :%d    \n"), i, myArray.GetAt(i));
        ::OutputDebugString(str);

    }


    myArray.SetAtGrow(1, 5);  // 索引1的值修改为5
    //如果指定的索引超出了数组的当前大小,则会自动扩展数组的大小以容纳新的元素
复制代码

 

 

posted @   天子骄龙  阅读(877)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
历史上的今天:
2020-09-15 qt--QDialogButtonBox按钮盒
2020-09-15 qt打印函数QDebug
2019-09-15 qt5--动画
2019-09-15 qt5--鼠标的光标
点击右上角即可分享
微信分享提示