#include <bitset>
#include <vector>
#include <chrono>
#include <iostream>
#include <cstdint>
 
constexpr size_t bitsetSize = 8000000; // 80 million bits for bitset
const size_t vectorSize = 8000000; // Equivalent to 80 million bits for vector<uint8_t>
 
int main() {
    // bitset 사용
    std::bitset<bitsetSize> bitsetData;
    auto startBitset = std::chrono::high_resolution_clock::now();
    for (size_t i = 0; i < bitsetSize; ++i) {
        bitsetData.flip(i); // 각 비트 반전
    }
    auto endBitset = std::chrono::high_resolution_clock::now();
    std::chrono::duration<double, std::milli> elapsedBitset = endBitset - startBitset;
    std::cout << "bitset processing time: " << elapsedBitset.count() << " ms\n";
 
    // vector<uint8_t> 사용
    std::vector<uint8_t> uint8Data(vectorSize, 0); // 초기화
    auto startUint8 = std::chrono::high_resolution_clock::now();
    for (size_t i = 0; i < vectorSize; ++i) {
        for (int bit = 0; bit < 8; ++bit) {
            uint8Data[i] ^= (1 << bit); // 각 비트 반전
        }
    }
    auto endUint8 = std::chrono::high_resolution_clock::now();
    std::chrono::duration<double, std::milli> elapsedUint8 = endUint8 - startUint8;
    std::cout << "vector<uint8_t> processing time: " << elapsedUint8.count() << " ms\n";
 
    return 0;
}
 

bitset processing time: 49.6254 ms

vector<uint8_t> processing time: 211.234 ms

bitset에서 지원하는 비트연산을 사용하는 경우 빠르다. 하지만 개별로 접근하여 사용할 경우 vector보다 느리다.