cuốn sách gpt4 ai đã làm

Tại chỗ std::copy_if

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 00:56:03 28 4
mua khóa gpt4 Nike

Theo tôi,std::copy_if Rất hữu ích cho việc lọc container:

std::vector vec { 1, 2, 3, 4 };
auto itEnd = std::copy_if(vec.begin(), vec.end(), vec.begin(),
[](int i) { return i > 2 });
vec.resize(itEnd - vec.begin());

Nhưng,std::copy_if Phạm vi đầu vào và đầu ra được chỉ định không thể trùng nhau.

Có lựa chọn nào khác không?

câu trả lời hay nhất

sao chép_if Chủ yếu được sử dụng để sao chép một phạm vi sang một phạm vi/vùng chứa khác, tức là theo thiết kế, bản chất của thuật toán này là sao chép các phần tử đáp ứng các điều kiện nhất định sang phạm vi khác (không chồng chéo) hoặc vùng chứa mới.

xóa_if Phù hợp hơn với nhu cầu của bạn; nó được sử dụng để lọc ra chính xác những gì bạn mong đợi. Tuy nhiên, nó chỉ đơn giản loại bỏ các phần tử bằng cách ghi đè; phần dư giữa đầu cũ và đầu mới sẽ là các phần tử không xác định sau khi hàm hoàn thành và cần được sử dụng. xóa Xóa thủ công như sau:

std::vector vec { 1, 2, 3, 4 };
vec.erase(std::remove_if(std::begin(vec),
std::end(vec),
[](int i) { return i <= 2;
std::end(vec));

Đây là một tập tin có tên xóa-xóa Thành ngữ C++. .


nếu như sao chép là điều bạn muốn, không phải sao chép_if, thì bạn có một giải pháp thay thế cho các phạm vi chồng chéo, đó là sao chép_backward;từ the documentation

Nếu d_first nằm trong [đầu tiên, cuối cùng), std::copy_backward phải được sử dụng thay vì std::copy.

Về c++ - std::copy_if tại chỗ, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/22631147/

28 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress