tôi chỉ viết một số mã để kiểm tra hành vi của std :: bình đẳng, và đã đi ngạc nhiên:C++ std :: bình đẳng - lý do đằng sau không thử nghiệm cho 2 phạm vi có kích thước bằng nhau?
int main()
{
try
{
std::list<int> lst1;
std::list<int> lst2;
if(!std::equal(lst1.begin(), lst1.end(), lst2.begin()))
throw std::logic_error("Error: 2 empty lists should always be equal");
lst2.push_back(5);
if(std::equal(lst1.begin(), lst1.end(), lst2.begin()))
throw std::logic_error("Error: comparing 2 lists where one is not empty should not be equal");
}
catch(std::exception& e)
{
std::cerr << e.what();
}
}
Sản lượng (một bất ngờ đối với tôi):
Error: comparing 2 lists where one is not empty should not be equal
Quan sát: tại sao nó std::equal không kiểm tra xem 2 container có cùng số size()
không? Có lý do chính đáng nào không?
Kiểm tra kích thước của danh sách không phải là thời gian không đổi - bạn phải lặp lại danh sách. –
@Neil: Có thể có thời gian không đổi. Việc triển khai Microsoft có một thời gian không đổi 'size()'. Trong các yêu cầu vùng chứa, tiêu chuẩn C++ chỉ nói 'size()' _should_ có độ phức tạp thời gian không đổi. –
Và việc thực hiện GCC có thời gian tuyến tính 'size()'. –