如何将这些元素表达为c ++

时间:2017-04-13 04:58:03

标签: c++ vector bitset

嗨,我想把它表达成c ++ vector<位集&LT 8是氢;> s {s1,s2,...,sn}; n是文件中元素的编号。所以,我做了cnt来计算文件中的元素。 所以,我制作了这段代码。但我认为我的代码不对。但我不知道如何解决这个问题。

int cnt;
for (int x = 0; x < sizeof(files) / sizeof(files[0]); x++) {
    std::ifstream f;

    f.open(files[x].c_str(), std::ios::in);
    if (f.good()) {
        while (!f.eof()) {//end of file check
            f >> str;
            bitset<8> s(str);
            cnt++;
            str.clear();
        }
        f.close();
    }

    for (int i = 0; i < cnt; i++){ 
        vector<bitset<8>> s{ s[i] };
    }
}

1 个答案:

答案 0 :(得分:1)

您的代码可以简化很多。这是一个示例:

// Create the vector of bitsets. It is empty to start with.
vector<bitset<8>> s;

// Go through each file.
for (int x = 0; x < sizeof(files) / sizeof(files[0]); x++)
{
   // Open the file.
   // std::ifstream f(files[x].c_str()); // For pre C++11.
   std::ifstream f(files[x]);            // For C++11 or later.

   // Define str here.
   // It should not be needed outside the for loop.
   std::string str;

   // Keep reading from the file until read fails.
   while (f >> str)
   {
      // Construct a bitset from the string.
      bitset<8> si(str);

      // Add the bitset to the vector of bitsets.
      s.push_back(si);
   }

   // There is no need to explicitly close the file.
   // The destructor will take care of that.
}

进一步阅读:Why is iostream::eof inside a loop condition considered wrong?