<commit_before>---
layout: post
title: "笛卡尔积: 副标题太长见正文"
date: 2020-08-11 18:00:00
categories: Language
---

# 笛卡尔积: 如何使用CPP新特性实现一个通用且类型安全的笛卡尔积迭代器

读Effective Java的Item 45和Item 47的时候,作者讨论了笛卡尔积和幂集的实现方式. 看完之后灵光一现,敲了一个结合两种实现方法的笛卡尔积集合.

## 笛卡尔积是什么

需要实现笛卡尔积的场景常见于枚举配置选项.比如我有一个函数,f(int numOfRequest, string serviceUrl, double timeout);

numOfRequest可以是{10, 20, 30}, serviceUrl可以是{"xx", "yy", "zz"}, timeout可以是{0.7, 0.8, 0.9}

如果我要测试所有的选项,那么一共有27种可能性. 这27种组合的数学名称就叫笛卡尔积.
<commit_msg>Update 2020-08-11-Cartesian-Product.md<commit_after>---
layout: post
title: "笛卡尔积: 副标题太长见正文"
date: 2020-08-11 18:00:00
categories: Lang
---

# 笛卡尔积: 如何使用CPP新特性实现一个通用且类型安全的笛卡尔积迭代器

读Effective Java的Item 45和Item 47的时候,作者讨论了笛卡尔积和幂集的实现方式. 看完之后灵光一现,敲了一个结合两种实现方法的笛卡尔积集合.

## 笛卡尔积是什么

需要实现笛卡尔积的场景常见于枚举配置选项.比如我有一个函数,f(int numOfRequest, string serviceUrl, double timeout);

numOfRequest可以是{10, 20, 30}, serviceUrl可以是{"xx", "yy", "zz"}, timeout可以是{0.7, 0.8, 0.9}

如果我要测试所有的选项,那么一共有27种可能性. 这27种组合的数学名称就叫笛卡尔积.

{'fraction_non_alphanumeric': 0.13052415210688592, 'fraction_numerical': 0.07810894141829394, 'mean_word_length': 6.550387596899225, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3005394', 'n_tokens_mistral': 701, 'n_tokens_neox': 712, 'n_words': 73}