【发布时间】:2022-01-14 08:18:09
【问题描述】:
要查找仅包含 0 和 1 的所有固定长度序列,我使用以下代码:
#include <bits/stdc++.h>
typedef long long int lli;
typedef std::vector<lli> vec_lli;
typedef std::vector<std::string> vec_s;
void print_array(vec_s arr) {
std::cout << '[';
int n = arr.size();
for (size_t i = 0; i < n; i++) {
std::cout << arr[i];
if (i < (n - 1)) {
std::cout << ", ";
}
}
std::cout << ']' << std::endl;
}
vec_s get_variants(int n) {
vec_s result = {"0", "1"};
vec_s temp;
temp.reserve(2);
result.reserve(2);
for (int i=0; i < (n - 1); ++i) {
std::copy(result.begin(), result.end(), temp.end()); // 1
for (int j=0; j < result.size(); ++j) {
temp[j] += "0";
result[j] += "1";
}
std::copy(temp.begin(),temp.end(), result.end());
temp.clear();
}
return result;
}
int main(int argc, char const *argv[]) {
int n;
std::cin >> n;
vec_s mb = get_variants(n);
print_array(mb);
return 0;
}
但向量temp 是空的,在第1 行和之后的复制之前。所以,我的程序的输出是 [0111, 1111]。我做错了什么?
【问题讨论】:
-
您的代码带有所谓的“竞争”和“在线评判”网站的所有标志。此类网站不是任何类型的教学或学习资源,使用它们可能会直接损害您的学习过程,因为此类网站所教授的所有内容似乎都是非常糟糕的习惯,而且通常还会直接使用无效代码。投资some good books,上课,远离这些网站,直到你改掉坏习惯并用好习惯取而代之。
-
您正在写信给
temp.end()和result.end()。这些是占位符元素的迭代器,attempting to write to them results in Undefined Behavior. -
@DrewDormann,将其发布为答案,我会将其标记为解决方案
-
您的代码似乎比仅仅尝试写入向量的
.end()迭代器更错误。