如何在eclipse上做网站,云南网站建设百度,形象标识设计,dw制作网页入门下面是一个随机的 packet#xff08;帧#xff09;插入函数#xff0c;ASC升序#xff0c;按 “packet_seq” 来控制成员之间的顺序#xff0c;该函数优化了#xff0c;倾向头、倾向尾。 即#xff1a;
根据 packet_seq 可以得出#xff0c;插入位置的最短距离#x…下面是一个随机的 packet帧插入函数ASC升序按 “packet_seq” 来控制成员之间的顺序该函数优化了倾向头、倾向尾。 即
根据 packet_seq 可以得出插入位置的最短距离更偏向左侧、还是右侧该函数实现仅供参考若需要多线程访问需要确保 “代码临界区同步问题”。
#include iostream
#include list
#include memorystruct tag_packet {uint32_t packet_seq;
};void emplace_packet(std::listtag_packet queue, const tag_packet packet) {for (;;) {auto tail queue.begin();if (tail queue.end()) {queue.emplace_back(packet);break;}if (tail-packet_seq packet.packet_seq) {queue.emplace_front(packet);break;}auto rtail queue.rbegin();if (rtail-packet_seq packet.packet_seq) {queue.emplace_back(packet);break;}if ((packet.packet_seq - tail-packet_seq) (rtail-packet_seq - packet.packet_seq)) {auto position std::upper_bound(queue.rbegin(), queue.rend(), packet,[](const tag_packet lhs, const tag_packet rhs) noexcept {return lhs.packet_seq rhs.packet_seq;});queue.emplace(position.base(), packet);}else {auto position std::lower_bound(queue.begin(), queue.end(), packet,[](const tag_packet lhs, const tag_packet rhs) noexcept {return lhs.packet_seq rhs.packet_seq;});queue.emplace(position, packet);}break;}
}int main() {std::listtag_packet packets;tag_packet packet1 { 100 };tag_packet packet2 { 50, };tag_packet packet3 { 200 };tag_packet packet4 { 150 };tag_packet packet5 { 75 };tag_packet packet6 { 115 };tag_packet packet7 { 45 };tag_packet packet8 { 135 };tag_packet packet9 { 195 };emplace_packet(packets, packet1);emplace_packet(packets, packet2);emplace_packet(packets, packet3);emplace_packet(packets, packet4);emplace_packet(packets, packet5);emplace_packet(packets, packet6);emplace_packet(packets, packet7);emplace_packet(packets, packet8);emplace_packet(packets, packet9);for (const auto packet : packets) {std::cout packet.packet_seq std::endl;}return 0;
}