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 //如果指定的索引超出了数组的当前大小,则会自动扩展数组的大小以容纳新的元素
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!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--鼠标的光标