微信推送在哪个网站做,南通做网站多少钱,手机网站集成支付宝,陕西住房建设厅考试官方网站有些场景下 vector 中会有重复元素#xff0c;而业务要求 vector 中避免出现重复元素。
我的算法如下#xff1a;
获取当前 vector 的元素数量#xff0c;并保存到一个 int 类型变量中。开启一个外部循环#xff0c;把 vector 从后向前循环#xff0c;循环范围是最后一个…有些场景下 vector 中会有重复元素而业务要求 vector 中避免出现重复元素。
我的算法如下
获取当前 vector 的元素数量并保存到一个 int 类型变量中。开启一个外部循环把 vector 从后向前循环循环范围是最后一个到正数第二个获取当前元素。开启一个内部循环。从当前 vector 索引向前循环到第一个元素获取排在前面的元素。如果前面的元素中有和当前元素相等的就删除当前元素并终止内部循环。如果没有就让内部循环继续运行直到结束。重复第一步直到外部循环结束。
因为在代码执行过程中vector 的元素数量有可能变少所以需要提前保存 vector 的元素数量。
从后向前循环是为了保证在删除元素的时候索引不会被影响并且能正确访问 vector 的元素。从前向后的话索引就无法保证能正确访问 vector 的元素了。
下面是以 int 整型为例自的代码
#includestdio.h
#includestdlib.h
#includestring.h
#includevectorint main(int argc, char** argv) {system(color 02);printf(argc%d, argv%s\n, argc, argv[0]);// Prepare the vector and the datas.const int LENGTH 12;int arr[LENGTH] { 1, 1, 1, 2, 3, 4, 4, 5, 6, 7, 7, 7 };
// int arr[LENGTH] { 12, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1 };std::vectorint intVector;for (int i 0; i LENGTH; i) {intVector.push_back(arr[i]);}// Print vector content.printf(Before delete repeat:\n);for (std::vectorint::iterator it intVector.begin(); it ! intVector.end(); it) {int item *it;printf(%d , item);}printf(\n);// Delete the repeat item.int size intVector.size();for (int i size - 1; i 1; i--) {int current intVector[i];// 查找前面一个重复的元素并删除。每次只删除一个for (int j i - 1; j 0; j--) {int previous intVector[j];if (current previous) {intVector.erase(intVector.begin() i);// Stop the j for circlej -1;}} // end for (int j i - 1; j 0; j--)}// Print vector content.printf(Print vector content:\n);for (std::vectorint::iterator it intVector.begin(); it ! intVector.end(); it) {int item *it;printf(%d , item);}printf(\nEnd.\n);return 0;
}