#include <cassert>
#include <iostream>
#include <chrono>
#include <vector>
#include <stdexcept>
void performOperationWithAssert(const std::vector<int>& vec, int index) {
assert(index < vec.size() && "Index out of bounds");
std::cout << vec[index] << std::endl;
}
void performOperationWithException(const std::vector<int>& vec, int index) {
if (index >= vec.size()) {
throw std::out_of_range("Index out of bounds");
}
std::cout << vec[index] << std::endl;
}
int main() {
std::vector<int> numbers(1000000, 42);
const int iterations = 1000000;
auto start = std::chrono::high_resolution_clock::now();
for (int i = 0; i < iterations; ++i) {
performOperationWithAssert(numbers, i % numbers.size());
}
auto end = std::chrono::high_resolution_clock::now();
std::chrono::duration<double> assertTime = end - start;
start = std::chrono::high_resolution_clock::now();
for (int i = 0; i < iterations; ++i) {
try {
performOperationWithException(numbers, i % numbers.size());
} catch (const std::out_of_range&) {
// Do nothing
}
}
end = std::chrono::high_resolution_clock::now();
std::chrono::duration<double> exceptionTime = end - start;
std::cout << "Time with assertions: " << assertTime.count() << " seconds" << std::endl;
std::cout << "Time with exceptions: " << exceptionTime.count() << " seconds" << std::endl;
return 0;
}