2016-11-13 53 views
-2

在我的程序上输入我得到来自标准输入的布尔值的不同长度线路(我知道线的长度),例如:最有效的方法来插入布尔值的线,以原始阵列

"1 0 0 1 0 0 1" 

这条线将被插入到bool数组,在这个例子:

bool tab[7]; 

我将致力于大2维数组,我在寻找最有效的方式插入此输入数组。

+1

除非这是针对某些高频率交易应用(每纳秒计数),否则任何简单的解析方法都将“足够高效”。你只是想让别人为你写代码,对吧? –

+1

使用['std :: bitset'](http://en.cppreference.com/w/cpp/utility/bitset)? –

回答

0

有很多种可能的方式
首先,你可以使用std :: bitset的,而不是数组,如果你想尝试了这一点(这种方式消耗更少的内存),因为正常的布尔实际上是8(看看文件位长,而不是1,你可能期望
你可以使用字符串流,加载整个输入字符串流,然后其他的方式仅仅使用

int counter= 0; 
string temp; 
while(stringstream >> temp){ 
    if(temp == "1") 
     tab[counter] = true; 
    else 
     tab[counter] = false; 
    counter++; 
} 

到整个输入保存到阵列,它的工作方式是循环将工作只要stringstream仍然包含某些东西,并且空间将输入流中的东西分开
记住我不想提供完整的代码,所以你可以尝试自己,让我知道如果你不能弄清楚它是如何工作

0

你可以做任务通过以下方式

#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 

,如果你有一个字符串的二维数组你应该做同样的循环。

0

我发现两个几乎同样好的标准输入(cin)性能问题的解决方案。

  1. 使用scanf()从而减少了我的程序执行时间从〜10秒至约5秒

  2. 包含在代码std::ios::sync_with_stdio(false);,所以CIN不以保持与C库的下层同步