在我的程序上输入我得到来自标准输入的布尔值的不同长度线路(我知道线的长度),例如:最有效的方法来插入布尔值的线,以原始阵列
"1 0 0 1 0 0 1"
这条线将被插入到bool数组,在这个例子:
bool tab[7];
我将致力于大2维数组,我在寻找最有效的方式插入此输入数组。
在我的程序上输入我得到来自标准输入的布尔值的不同长度线路(我知道线的长度),例如:最有效的方法来插入布尔值的线,以原始阵列
"1 0 0 1 0 0 1"
这条线将被插入到bool数组,在这个例子:
bool tab[7];
我将致力于大2维数组,我在寻找最有效的方式插入此输入数组。
有很多种可能的方式
首先,你可以使用std :: bitset的,而不是数组,如果你想尝试了这一点(这种方式消耗更少的内存),因为正常的布尔实际上是8(看看文件位长,而不是1,你可能期望
你可以使用字符串流,加载整个输入字符串流,然后其他的方式仅仅使用
int counter= 0;
string temp;
while(stringstream >> temp){
if(temp == "1")
tab[counter] = true;
else
tab[counter] = false;
counter++;
}
到整个输入保存到阵列,它的工作方式是循环将工作只要stringstream仍然包含某些东西,并且空间将输入流中的东西分开
记住我不想提供完整的代码,所以你可以尝试自己,让我知道如果你不能弄清楚它是如何工作
你可以做任务通过以下方式
#include <iostream>
#include <iomanip>
#include <sstream>
#include <algorithm>
#include <iterator>
int main()
{
char line[] = "1 0 0 1 0 0 1";
bool tab[7];
std::istringstream is(line);
std::fill(std::copy(std::istream_iterator<bool>(is),
std::istream_iterator<bool>(),
tab),
std::end(tab), false);
for (bool b : tab) std::cout << std::boolalpha << b << ' ';
std::cout << std::endl;
return 0;
}
程序输出
true false false true false false true
,如果你有一个字符串的二维数组你应该做同样的循环。
我发现两个几乎同样好的标准输入(cin)性能问题的解决方案。
使用scanf()
从而减少了我的程序执行时间从〜10秒至约5秒
包含在代码std::ios::sync_with_stdio(false);
,所以CIN不以保持与C库的下层同步
除非这是针对某些高频率交易应用(每纳秒计数),否则任何简单的解析方法都将“足够高效”。你只是想让别人为你写代码,对吧? –
使用['std :: bitset'](http://en.cppreference.com/w/cpp/utility/bitset)? –