意外输出:矢量矢量(功率集)
Unexpected output: vector of vector (power set)
我正在尝试编写CTCI问题之一的解决方案 - 编写一个方法来返回集合的所有子集。但是,我没有得到预期的输出。似乎有一个愚蠢的错误,但我无法发现它。下面是代码:
template <typename T>
std::vector<std::vector<T>> power_set( const std::vector<T>& input ) {
std::vector<std::vector<T>> output;
for ( const auto& element : input ) {
power_set_helper( element, output );
}
return output;
}
template <typename T>
void power_set_helper( const T& element, std::vector<std::vector<T>>& output ) {
for ( auto set_element : output ) {
set_element.push_back( element );
output.push_back( set_element );
}
output.emplace_back( std::initializer_list<T>{element} );
}
测试用例:
std::vector<int> input = {1, 2, 3};
std::vector<std::vector<int>> expected_ouput = {{1}, {1, 2}, {2}, {1, 3}, {1, 2, 3}, {2, 3}, {3}};
但我得到的输出是: { { 1 }
, { 1, 2 }, { 2 }, { 1, 3 }, { 1, 2, 3 }, { 3 }, { 3 } }您能否帮助发现错误并分享原因?
for ( auto set_element : output ) {
// ...
output.push_back( set_element );
在这里,您可以修改迭代的向量,从而获得 UB
可能的解决方案是制作副本
for ( auto set_element : std::vector<std::vector<T>>(output) ) {
// ...
output.push_back( set_element );
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 为什么我的代码在输出中增加了93天
- 如何从void函数输出字符串
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- AES加密到解密未正确输出
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- C++格式化输出问题
- 将值从二维数组输出到文本文件
- 集合上的输出迭代器:assign和increment迭代器
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 为什么rk4.do_step不输出C++中的初始条件
- 输出没有重复元素的动态数组(收缩数组)C++
- 意外输出:矢量矢量(功率集)