不可变向量的不可变子向量
Immutable sub vector of immutable vector
假设我有一个const vector<string>
,里面有一些元素,我想创建这个向量的const
子集,我该怎么做呢?
理想情况下,如果c++支持像下面这样的代码会很酷,不幸的是它没有。有人知道变通的办法吗?
#include <fstream>
#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
ifstream infile("input.txt"); // contains apple, orange, banana in separate lines
istream_iterator<string> eos;
istream_iterator<string> input(infile);
const vector<string> stuff(input, eos);
const vector<string> a_stuff(stuff.copy_if([](const string& s) { return s[0] == 'a'; }));
return 0;
}
假设您想要复制包含子集的副本,您可以使用函数并将结果分配给const vector<T>
#include <vector>
#include <algorithm>
#include <iterator>
template <typename T, typename Pred>
std::vector<T> vector_copy_if(std::vector<T> const & vec, Pred && pred)
{
std::vector<T> result;
std::copy_if(vec.begin(), vec.end(), std::back_inserter(result), pred);
return result;
}
int main()
{
std::vector<int> const some_numbers { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
std::vector<int> const even_numbers = vector_copy_if(some_numbers, [](int x) { return x % 2 == 0; });
}
也可以使用boost::filter_iterator
来实现相同的结果:
#include <vector>
#include <string>
#include <boost/iterator/filter_iterator.hpp>
using namespace std;
int main()
{
const vector<string> v {"apple", "banana", "orange"};
auto filter= [] (string s){return s.length() > 0 && s[0] == 'a';};
auto start = boost::make_filter_iterator(filter, v.begin(), v.end());
auto end = boost::make_filter_iterator(filter, v.end(), v.end());
const vector<string> cv (start, end);
}
相关文章:
- 正在寻找C++不可变的hashset/hashmap
- 如何在不知道向量大小的情况下输入向量内部的向量?
- 具有常量属性的不可变类
- 从数组中删除非唯一值、保持顺序和不使用向量的最佳方法?
- 为什么C++ STL 哈希表 (unordered_map) 不接受向量作为键
- 为什么将函数传递给内核会导致数据变得不可变?
- C++去除前x个元素的有效方法,在不改变向量大小的情况下将第x+1个元素推到第一个
- 现代c++编译器会优化不可变的临时变量吗
- 为什么函数返回不移动向量?
- C++中的不可变列表
- 如何将地图作为不可变地图传递?
- 不可变的全局对象应该声明为"const my_result_t BLAH"还是"extern const my_result_t BLAH;"?
- 递归回文检查,不使用向量、大小或其他参数
- 向不可变纹理存储提供数据
- 在C++中创建不可变且高效的类的惯用方法
- 为什么 std::accumulate 生成705032704作为输出,而不是向量中元素的总和?
- std::shared_ptr<std::string const> 可以作为引用计数的不可变字符串的有效实现吗?
- C++返回不可变指针向量的函数语法
- 优化可变与不可变向量数学
- 不可变向量的不可变子向量