天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 183|回复: 2

vector<double>数组 差集

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-3-18 07:05:55 | 显示全部楼层 |阅读模式
  1. 如果你有一个vector<double>数组,想要从这个数组中减去已知的两个特定值,并得到剩余元素的新数组,可以编写一个函数来实现。这里是一个示例:
  2. #include <iostream>
  3. #include <vector>
  4. // 函数:从vector中减去指定值并返回新的vector
  5. std::vector<double> subtractValues(const std::vector<double>& input, double value1, double value2) {
  6.     std::vector<double> result;
  7.     for (double val : input) {
  8.         // 如果val不等于value1和value2,则将减去后的结果添加到新向量中
  9.         if (val != value1 && val != value2) {
  10.             result.push采用back(val - value1 - value2);
  11.         }
  12.     }
  13.     return result;
  14. }
  15. int main() {
  16.     std::vector<double> vec = {1.0, 2.0, 3.0, 4.0, 5.0};
  17.     double val1 = 2.0;
  18.     double val2 = 3.0;
  19.     std::vector<double> remainingValues = subtractValues(vec, val1, val2);
  20.     // 打印剩余值
  21.     for (double value : remainingValues) {
  22.         std::cout << value << " ";
  23.     }
  24.     return 0;
  25. }
复制代码

 

 

 

 

vector<double>数组 差集

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
 楼主| 发表于 2024-3-18 07:07:40 | 显示全部楼层
  1. #include <iostream>
  2. #include <vector>
  3. // 函数:从vector中减去指定vector中的所有值并返回新的vector
  4. std::vector<double> subtractValues(const std::vector<double>& input, const std::vector<double>& subtractFrom) {
  5.     std::vector<double> result;
  6.     for (double val : input) {
  7.         bool shouldSubtract = false;
  8.         for (double subVal : subtractFrom) {
  9.             if (val == subVal) {
  10.                 shouldSubtract = true;
  11.                 break; // 找到匹配项后停止查找
  12.             }
  13.         }
  14.         if (!shouldSubtract) {
  15.             // 如果当前值不在subtractFrom向量中,则保持原样添加到结果向量
  16.             result.push采用back(val);
  17.         } else {
  18.             // 若你想从每个找到的匹配项中减去整个subtractFrom向量的所有值(累加减法)
  19.             double subtractedValue = val;
  20.             for (double subVal : subtractFrom) {
  21.                 subtractedValue -= subVal;
  22.             }
  23.             result.push采用back(subtractedValue);
  24.         }
  25.     }
  26.     return result;
  27. }
  28. int main() {
  29.     std::vector<double> vec = {1.0, 2.0, 3.0, 4.0, 5.0};
  30.     std::vector<double> subtractThese = {2.0, 3.0};
  31.     std::vector<double> remainingValues = subtractValues(vec, subtractThese);
  32.     // 打印剩余值
  33.     for (double value : remainingValues) {
  34.         std::cout << value << " ";
  35.     }
  36.     return 0;
  37. }
复制代码

 

 

 

 

vector<double>数组 差集

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
 楼主| 发表于 2024-3-18 07:15:32 | 显示全部楼层
  1. // 结果容器类型,保存组合和剩余元素对
  2. using CombinationResult = std::pair<std::vector<double>, std::vector<double>>;
  3. // 获取n个元素的所有组合(不重复),并返回包含组合及剩余元素的向量
  4. std::vector<CombinationResult> getCombinationsAndRemaining(const std::vector<double>& input, int n) {
  5.     std::vector<CombinationResult> results;
  6.     std::unordered采用set<double> selected采用elements;
  7.     // 回溯法生成所有组合
  8.     for (size采用t i = 0; i < input.size(); ++i) {
  9.         if (selected采用elements.find(input[i]) == selected采用elements.end()) { // 没有选过这个元素
  10.             selected采用elements.insert(input[i]);
  11.             
  12.             // 当组合数量达到n时,添加当前组合到结果列表,并开始处理剩余元素
  13.             if (results.empty() || results.back().first.size() < n) {
  14.                 results.back().first.push采用back(input[i]);
  15.                 if (results.back().first.size() == n) {
  16.                     // 复制原始输入向量以获得剩余元素
  17.                     std::vector<double> remaining(input);
  18.                     // 移除已选择的元素
  19.                     for (double val : results.back().first) {
  20.                         remaining.erase(std::remove(remaining.begin(), remaining.end(), val), remaining.end());
  21.                     }
  22.                     results.back().second = remaining;
  23.                 }
  24.             } else {
  25.                 results.emplace采用back({input[i]}, std::vector<double>());
  26.             }
  27.             // 继续生成包含input[i]的其他组合
  28.             auto sub采用results = getCombinationsAndRemaining(input, n);
  29.             results.reserve(results.size() + sub采用results.size());
  30.             for (auto& sub采用result : sub采用results) {
  31.                 results.push采用back(sub采用result);
  32.             }
  33.             // 回溯:移除刚刚添加的元素
  34.             selected采用elements.erase(input[i]);
  35.         }
  36.     }
  37.     return results;
  38. }
  39. int main() {
  40.     std::vector<double> vec = {1.0, 2.0, 3.0, 4.0, 5.0};
  41.     int n = 2;
  42.     std::vector<CombinationResult> combinations采用and采用remainings = getCombinationsAndRemaining(vec, n);
  43.     // 打印每个组合及对应的剩余值
  44.     for (const auto& result : combinations采用and采用remainings) {
  45.         std::cout << "组合: ";
  46.         for (double value : result.first) {
  47.             std::cout << value << " ";
  48.         }
  49.         std::cout << "剩余元素: ";
  50.         for (double value : result.second) {
  51.             std::cout << value << " ";
  52.         }
  53.         std::cout << std::endl;
  54.     }
  55.     return 0;
  56. }
复制代码

 

 

 

 

vector<double>数组 差集
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 11:32 , Processed in 0.136230 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表