c++ - 是否有一个 C++ 函数可以将向量分成三个单独的向量?
问题描述
我正在寻找一种解决方案,将向量分成 3 个元素比例为 9:1:1 的独立向量,例如,如果我们在原始向量中有 1100 个元素,那么我希望得到 3 个具有连续 900、100 和 100 个元素的向量。有一个函数 std::partition_copy,但是它只将数据复制到 2 个单独的向量。
解决方案
没有标准的算法可以直接做你想做的事。我想有太多的特殊情况需要考虑。例如,当初始向量只有9个元素时,如何按照9:1:1分配元素?每个分区是否应该至少包含 1 个元素?结果应该是 7:1:1 还是 8:1:0?
但是,您可以使用std::vector
带有两个迭代器的 s 构造函数:
#include <vector>
#include <iostream>
#include <numeric>
int main() {
std::vector<int> v(10);
std::iota(v.begin(),v.end(),0);
size_t mid1 = v.size()*0.8;
size_t mid2 = mid1+v.size()*0.1;
std::vector<int> v1{v.begin(),v.begin()+mid1};
std::vector<int> v2{v.begin()+v1.size(),v.begin()+mid2};
std::vector<int> v3{v.begin()+v1.size()+v2.size(),v.end()};
for (const auto& e : v1) std::cout << e << " ";
std::cout << "\n";
for (const auto& e : v2) std::cout << e << " ";
std::cout << "\n";
for (const auto& e : v3) std::cout << e << " ";
std::cout << "\n";
}
当项目的数量以绝对数字给出时,就不会出现上述问题,您可以编写一个通用算法,用源向量中的( ) 个元素填充向量n
。m_i
0<=i<n
最后但并非最不重要的一点是,考虑复制整个向量,只是为了能够访问它的子范围,这不是很惯用的。而不是创建包含部分元素的新向量,您应该重构在这些子范围上工作的方法以采用迭代器而不是向量,即
template <typename Iterator>
void do_something_with_vector_elements(Iterator begin,Iterator end);
代替
void do_something_with_all_vector_elements(const std::vector<int>& v);
推荐阅读
- python - bcrypt 相同字符串的不同哈希?
- r - 在 R 中的 ggplot2 上使用 ConnLines
- c# - 模型 EF Core 的计算属性 - 属性还是方法?
- json - 如何在 clickfunnels 中创建 webhook 以向愿望清单成员发送信息
- ruby - 自动提交 ODBC api 无法通过 IBM iAccess 到 unixODBC 到 ruby-odbc
- zsh - 如何在zsh中用反引号引用字符串?
- curl - curl命令输出带有时间戳的文件名
- xaml - 如何在导航页面的导航栏部分放置图标
- c - 为什么不先分配指针取消引用就不起作用?
- sql - CLEARDB 中 where 和 like 的区别