c++ - 什么分配一个我不想等于任何可能输入的变量?
问题描述
问题是
实现函数 unique_in_order ,它接受一个序列作为参数并返回一个项目列表,其中没有任何相邻的具有相同值的元素并保留元素的原始顺序。
例如:
uniqueInOrder("AAAABBBCCDAABBB") == {'A', 'B', 'C', 'D', 'A', 'B'}
uniqueInOrder("ABBCcAD") == {'A', 'B', 'C', 'c', 'A', 'D'}
uniqueInOrder([1,2,2,3,3]) == {1,2,3}
现在我的解决方案是
template <typename T>
std::vector<T> uniqueInOrder(const std::vector<T>& iterable){
std::vector<T> unique_set;
T last = 0;
for(auto & element : iterable) {
if(element != last) {
unique_set.push_back(element);
}
last = element;
}
return unique_set;
}
std::vector<char> uniqueInOrder(const std::string& iterable){
std::vector<char> unique_set;
char last = 0;
for(auto & element : iterable) {
if(element != last) {
unique_set.push_back(element);
}
last = element;
}
return unique_set;
}
问题是有时第一个元素是 0。我可以分配最后一个永远不会匹配输入的内容?我尝试使用 NULL 但我认为无论如何它只是编译为 0。
解决方案
有一种算法可以做到这一点,称为std::unique_copy
template <typename T>
std::vector<T> uniqueInOrder(const std::vector<T>& iterable){
std::vector<T> unique_set;
std::unique_copy(iterable.begin(), iterable.end(), std::back_inserter(unique_set));
return unique_set;
}
// same thing for std::string
std::vector<char> uniqueInOrder(const std::string& iterable){
std::vector<char> unique_set;
std::unique_copy(iterable.begin(), iterable.end(), std::back_inserter(unique_set));
return unique_set;
}
推荐阅读
- php - 如果数据与数据库不匹配,如何抛出无效用户名或密码错误?
- soap - 如何解决 XmlPullParserException?
- c# - 使用 iTextSharp 将多个图像转换为 PDF
- html - 具有长 html 字符串值的 MS SQL 更新查询
- laravel - Laravel 5通过AJAX在storage/export下下载excel文件(maatwebsite/excel)
- azure - Microsoft 认知服务订阅不起作用
- coroutine - 为什么要在 C/C++ 中使用协程
- json - 如何将火花数据帧的每个元素与其各自的列名映射并使用scala对其应用很少的转换?
- google-tag-manager - 如何设置价值低于 1 美元的 Google 跟踪代码管理器事件?
- c++ - 接收 0xC0000005:访问冲突读取位置在指针数组中存储新指针