当前位置: 首页 > news >正文

网站目录文件夹网站页面 原则

网站目录文件夹,网站页面 原则,公司建设网站费用,个人网站首页怎么做声明:本文内容生成自ChatGPT,目的是为方便大家了解学习作为引用到作者的其他文章中。 std::unique 是 C 标准库中的一个算法函数,用于移除相邻的重复元素,使每个相邻的元素在容器中保持唯一。它不会真正移除元素,而是通…

声明:本文内容生成自ChatGPT,目的是为方便大家了解学习作为引用到作者的其他文章中。

std::unique 是 C++ 标准库中的一个算法函数,用于移除相邻的重复元素,使每个相邻的元素在容器中保持唯一。它不会真正移除元素,而是通过重新排列元素来消除相邻的重复项,并返回一个指向新结尾的迭代器。此算法通常和 std::erase 或者 std::erase-remove idiom 结合使用,以实际移除不需要的元素。

语法

#include <algorithm>template <class ForwardIt>
ForwardIt unique(ForwardIt first, ForwardIt last);template <class ForwardIt, class BinaryPredicate>
ForwardIt unique(ForwardIt first, ForwardIt last, BinaryPredicate p);

参数

  • first, last:表示要处理的范围的迭代器。
  • p(可选):自定义的二元谓词,用于定义 "相等" 的标准。

返回值

std::unique 返回一个迭代器,指向删除相邻重复元素后的新结尾位置。容器中从该位置到 last 之间的元素仍然存在,但它们的值是未定义的。

特点

  • std::unique 只移除相邻的重复元素。如果需要移除所有重复的元素,通常需要先使用 std::sort 对容器排序。
  • 它通过重新排列容器中的元素,将相邻重复的元素放置在一起并返回新范围的末尾迭代器。容器的大小不会实际改变。

示例

1. 基本使用(移除相邻重复项)
#include <iostream>
#include <vector>
#include <algorithm>int main() {std::vector<int> vec = {1, 1, 2, 3, 3, 4, 5, 5, 6};// 使用 std::unique 移除相邻的重复项auto new_end = std::unique(vec.begin(), vec.end());// 打印结果std::cout << "Vector after unique: ";for (auto it = vec.begin(); it != new_end; ++it) {std::cout << *it << " ";}std::cout << std::endl;return 0;
}

输出:

Vector after unique: 1 2 3 4 5 6 
2. 实际移除重复项(结合 erase
#include <iostream>
#include <vector>
#include <algorithm>int main() {std::vector<int> vec = {1, 1, 2, 3, 3, 4, 5, 5, 6};// 使用 std::unique 移除相邻的重复项auto new_end = std::unique(vec.begin(), vec.end());// 使用 erase 减少容器大小vec.erase(new_end, vec.end());// 打印结果std::cout << "Vector after erase: ";for (const auto& num : vec) {std::cout << num << " ";}std::cout << std::endl;return 0;
}

输出:

Vector after erase: 1 2 3 4 5 6 
3. 自定义谓词

你可以通过提供自定义的谓词来定义 "相等" 的标准。例如,比较绝对值相等的元素:

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>int main() {std::vector<int> vec = {1, -1, 2, 3, -3, 4, 5, 5, 6};// 使用自定义谓词来移除相邻绝对值相等的元素auto new_end = std::unique(vec.begin(), vec.end(), [](int a, int b) {return std::abs(a) == std::abs(b);});// 使用 erase 减少容器大小vec.erase(new_end, vec.end());// 打印结果std::cout << "Vector after unique with custom predicate: ";for (const auto& num : vec) {std::cout << num << " ";}std::cout << std::endl;return 0;
}

输出:

Vector after unique with custom predicate: 1 2 3 4 5 6 
4. 非相邻重复元素的移除(排序+unique)

std::unique 只移除相邻的重复元素。如果容器中存在非相邻的重复元素,通常需要先排序。

#include <iostream>
#include <vector>
#include <algorithm>int main() {std::vector<int> vec = {1, 5, 2, 3, 3, 4, 5, 1, 6};// 对容器进行排序std::sort(vec.begin(), vec.end());// 使用 std::unique 移除所有重复的元素auto new_end = std::unique(vec.begin(), vec.end());// 使用 erase 减少容器大小vec.erase(new_end, vec.end());// 打印结果std::cout << "Vector after sort and unique: ";for (const auto& num : vec) {std::cout << num << " ";}std::cout << std::endl;return 0;
}

输出:

Vector after sort and unique: 1 2 3 4 5 6 

总结

  • std::unique 是一个用于移除相邻重复元素的算法。
  • 它通过重新排列容器中的元素,将不需要的重复元素移动到末尾,并返回新的末尾位置。
  • 如果想要实际移除元素,需要结合 erase 函数。
  • 如果容器中存在非相邻的重复元素,通常需要先使用 std::sort 对容器进行排序。
http://www.yayakq.cn/news/936690/

相关文章:

  • 如何在中国建设银行网站转账wordpress 用js
  • 图标使用wordpress优化人员配置
  • 做彩铃网站网店模板
  • 管理系统oawordpress速度优化存
  • 网站设计技术有哪些网站做二级登录页面容易吗
  • 在线制作网站简洁大气传媒公司名字
  • 电子商城网站怎么做庆阳网站网站建设
  • dede手机网站模版外贸平台招聘
  • 服装设计师必看的网站深圳市建设局
  • 狮山网站设计网站图片展示方式有哪些
  • 有免费可以做的网站吗北京游戏软件开发公司
  • 在深圳市住房和建设局网站网站子目录怎么做的
  • 福建龙岩网站制作公司长沙网站建站模板
  • 邯郸市城乡建设管理局网站桂林网络推广外包
  • 网站商城的公司运营结构景区宣传推广方案
  • 网站注册跨境电商网站排行榜
  • 做外包软件的网站嵌入式培训出来能找到工作吗
  • 公司网站建设是哪个部门的事情wordpress app 开发
  • 公众号开发微网站开发虚拟钱包对接网站开发视频教程
  • 南沙滩网站建设温州网站推广驭明
  • 网站seo优化书籍购买wordpress模板
  • 商城app网站开发做彩票网站多少钱
  • 软件通网站建设搜房网网站跳出率
  • 丰台网站开发公司韩国导航地图中文版app
  • 视频网站不赚钱为什么还做支付宝网站怎么设计的
  • 广西兴业县建设局网站丹徒网站建设策划
  • 网站建设一年多少韩国私人网站服务器
  • 博物馆建设网站的目的及功能黄岐建网站
  • 做机械的老板都看什么网站省示范院校建设网站
  • 广东省建设执业注册中心网站西安驾校网站建设