admin 发表于 2024-2-26 09:30:28

[分享] AcArray的排序及去除重复

ObjectARX 中几何大都使用 AcArray ,AcArray 的排序可以使用 stl 的 sort 函数, 而且 vector 的 unique 函数可以实现 vector 的“消除重复”, 再使用 vector::erase 函数可以实现真正的消除重复,相关资料可以网上搜索,下面以 AcGeIntArray 为例说明,其它形式的AcArray自己定义比较函数即可
本帖隐藏的内容
普通浏览复制代码

static void asdkMyGroupsTest01(void){
                AcGeIntArray arrs;
                arrs.append(1);
                arrs.append(3);
                arrs.append(10);
                arrs.append(4);
                arrs.append(3);
                arrs.append(3);
                acutPrintf(采用T("\nBefor sort: "));
                for (int i=0;i<arrs.length();i++)
                {
                        acutPrintf(采用T("\n%d"),arrs.at(i));
                }
                //排序
                sort(arrs.asArrayPtr(),arrs.asArrayPtr()+arrs.length());
                acutPrintf(采用T("\nAfter sort:"));
                for (int i=0;i<arrs.length();i++)
                {
                        acutPrintf(采用T("\n%d"),arrs.at(i));
                }
                //去除重复,只会保留最后重复
                int* index=std::unique(arrs.asArrayPtr(),arrs.asArrayPtr()+arrs.length());
                acutPrintf(采用T("\nindex=%d,after unique"),*index);
                for (int i=0;i<arrs.length();i++)
                {
                        acutPrintf(采用T("\n%d"),arrs.at(i));
                }
                //删除重复部分
                arrs.removeSubArray(*index,arrs.length()-1);
                acutPrintf(采用T("\nAfter removeSubarray:"));
                for (int i=0;i<arrs.length();i++)
                {
                        acutPrintf(采用T("\n%d"),arrs.at(i));
                }
      }

admin 发表于 2024-2-26 09:31:12

运行结果
命令: test01

Befor sort:
1
3
10
4
3
3
After sort:
1
3
3
3
4
10
index=4,after unique
1
3
4
10
4
10
After removeSubarray:
1
3
4
10
页: [1]
查看完整版本: [分享] AcArray的排序及去除重复