#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보다 느리다.