嗯,我正在写一个代码,将两个字符串转换为一个位集(不幸的是,loop_list([Element|[]], NewList, Number) :-
p(Element, NewList, Number).
loop_list([Head|Tail], [Tmp|NewList], Number) :-
loop_list(Tail, Tmp, Number).
不能使用,因为它的编译时间模板的大小要求恒定)。
由于某些原因,我无法引用基于范围的循环的迭代:
std::bitset
#include <iostream>
#include <sstream>
#include <vector>
int main()
{
std::string line;
std::getline(std::cin, line);
std::string chips;
std::string pattern;
std::istringstream issline(line);
issline >> chips;
issline >> pattern;
auto toBool = [](const char c) -> bool { return(c == 'B'); };
std::vector<bool> bitchips;
for(auto& i : chips){
bitchips.push_back(toBool(i));
}
std::vector<bool> bitpattern;
for(auto& i: pattern){
bitpattern.push_back(toBool(i));
}
auto flip = [&bitchips]() -> void
{
for(auto& i : bitchips) { //error
i = !i;
}
};
return 0;
}
到目前为止,什么程序在做
正在读取用户输入:error: invalid initialization of non-const reference of type 'std::_Bit_reference&' from an rvalue of type 'std::_Bit_iterator::reference {aka std::_Bit_reference}'
。转换为:BBBBNNNB NNNBBBNB
答案 0 :(得分:2)
std::vector<bool>
是[1613x30]
的特化,它的行为与普通std::vector
不同。特别是std::vector
是代理类。
代表对单个布尔值的引用的代理类
您可以改用右值引用。例如
std::vector<bool>::reference
或
auto flip = [&bitchips]() -> void
{
for(auto&& i : bitchips) {
i = !i;
}
};
或
auto flip = [&bitchips]() -> void
{
for(auto i : bitchips) {
i = !i;
}
};
即使他们看起来违反直觉。