c++11 container liber: std::queue std::map std::vector std::unique_ptr
来源:互联网 发布:微商管理系统源码 编辑:程序博客网 时间:2024/06/07 11:11
typedef std::map<std::unique_ptr<TUnixSocket>,
std::unique_ptr<TPacketPayloads>> TSocketPacketMap;
typedef std::vector<std::pair<std::uint64_t, std::uint64_t>> TBufferRange;
std::unique_ptr<TSocketPacketMap> SocketPacketMap;
std::unique_ptr<TBufferRange> BufferRanges;
std::find_if
std::
shared_ptr
unique_ptrstd::
std::
make_shared
class TMediaSourceBuffer {
public:
std::string Id;
std::string Type;
double EndTimeRange;
std::string Codecs;
TUnixSocket ListenSocket;
std::string ListenSocketPath;
typedef std::deque<std::unique_ptr<TPacketPayload>> TPacketPayloads;
typedef std::vector<std::pair<double, double>> TBufferRange;
std::unique_ptr<TUnixSocket> StreamSocket;
TPacketPayloads PacketPayloads;
TBufferRange BufferRanges;
TMediaSourceBuffer(std::string id,
std::string type = "",
double endTimeRange = 0.0,
std::string codecs = "");
TMediaSourceBuffer() = delete;
};
std::vector<std::unique_ptr<TMediaSourceBuffer>> MediaSourceBuffers;
audo and for:
for (auto &msb : MediaSourceBuffers) {
if (msb->StreamSocket && msb->StreamSocket->IsOpen()) {
KTRACE1("Send data to %d, PacketPayloads.size(): %d",
msb->StreamSocket->GetFD(),
msb->PacketPayloads.size());
while (!msb->PacketPayloads.empty()) {
if ((*msb->PacketPayloads.begin())->Send(*msb->StreamSocket)) {
msb->PacketPayloads.pop_front();
}
else {
KTRACE3(">> socket buffer is full, Type: %s ", msb->Type.c_str());
break;
}
}
auto , vector, push_back, move
auto msb = std::unique_ptr<TMediaSourceBuffer>(
new TMediaSourceBuffer(Utils::GetStringFromEKString(id),
Utils::GetStringFromEKString(type),
0.0));
MediaSourceBuffers.push_back(std::move(msb));
find_if,
Lambda Functions and Algorithms
auto msb = std::find_if(
MediaSourceBuffers.begin(),
MediaSourceBuffers.end(),
[&sourceId] (std::unique_ptr<TMediaSourceBuffer> &each)
{ return each->Id == sourceId;});
if (msb == MediaSourceBuffers.end()) {
KTRACE1("Invalid media source id");
return false;
}
numRanges = (*msb)->BufferRanges.size();
KTRACE1("<< sourceId: %s, type: %s, numRanges: %u, ",
sourceId.c_str(), (*msb)->Type.c_str(), numRanges);
return true;
unique_ptr push_back
(*msb)->PacketPayloads.push_back(
std::unique_ptr<TPacketPayload>(new TPacketPayload(
(uint8_t*)data,
length,
nullptr)));
Containers library
http://en.cppreference.com/w/cpp/container
Containers library
The Containers library is a generic collection of class templates and algorithms that allow programmers to easily implement common data structures like queues, lists and stacks. There are three classes of containers -- sequence containers, associative containers, and unordered associative containers -- each of which is designed to support a different set of operations.
The container manages the storage space that is allocated for its elements and provides member functions to access them, either directly or through iterators (objects with similar properties to pointers).
Most containers have at least several member functions in common, and share functionalities. Which container is the best for the particular application depends not only on the offered functionality, but also on its efficiency for different workloads.
Sequence containers
Sequence containers implement data structures which can be accessed sequentially.
(class template)
(class template)
(class template)
(class template)
(class template)
Associative containers
Associative containers implement sorted data structures that can be quickly searched (O(log n) complexity).
(class template)
(class template)
(class template)
(class template)
Unordered associative containers
Unordered associative containers implement unsorted (hashed) data structures that can be quickly searched (O(1)amortized, O(n) worst-case complexity).
(class template)
(class template)
(class template)
(class template)
Container adaptors
Container adaptors provide a different interface for sequential containers.
(class template)
(class template)
(class template)
Iterator invalidation
This section is incompleteThread safety
- All container functions can be called concurrently by different threads on different containers. More generally, the C++ standard library functions do not read objects accessible by other threads unless those objects are directly or indirectly accessible via the function arguments, including the this pointer.
- All const member functions can be called concurrently by different threads on the same container. In addition, the member functions
begin()
,end()
,rbegin()
,rend()
,front()
,back()
,data()
,find()
,lower_bound()
,upper_bound()
,equal_range()
,at()
, and, except in associative containers,operator[]
, behave as const for the purposes of thread safety (that is, they can also be called concurrently by different threads on the same container). More generally, the C++ standard library functions do not modify objects unless those objects are accessible, directly or indirectly, via the function's non-const arguments, including the this pointer. - Different elements in the same container can be modified concurrently by different threads, except for the elements of std::vector<bool> (for example, a vector of std::future objects can be receiving values from multiple threads).
- Iterator operations (e.g. incrementing an iterator) read, but do not modify the underlying container, and may be executed concurrently with operations on other iterators on the same container, with the const member functions, or reads from the elements. Container operations that invalidate any iterators modify the container and cannot be executed concurrently with any operations on existing iterators even if those iterators are not invalidated.
- Elements of the same container can be modified concurrently with those member functions that are not specified to access these elements. More generally, the C++ standard library functions do not read objects indirectly accessible through their arguments (including other elements of a container) except when required by its specification.
- In any case, container operations (as well as algorithms, or any other C++ standard library functions) may be parallelized internally as long as this does not change the user-visible results (e.g.std::transform may be parallelized, but not std::for_each which is specified to visit each element of a sequence in order)
Member function table
- functions present in C++03 - functions present since C++11<array>
<vector>
<deque>
<forward_list>
<list>
<set>
<map>
<unordered_set>
<unordered_map>
<stack>
<queue>
access
(A PDF version of this table is available at File:container-library-overview-2012-12-27.pdf.)
- c++11 container liber: std::queue std::map std::vector std::unique_ptr
- std::map与std::vector
- std::unique_ptr
- C++11 智能指针std::shared_ptr/std::unique_ptr/std::weak_ptr
- 关于std:auto_ptr std:shared_ptr std:unique_ptr
- std
- std
- std
- std::map&&std::set
- std::map & std::hash_map
- std::queue
- std::queue
- std::queue
- std::queue
- C++-std::Vector
- std::vector
- std vector
- std::vector
- 返回值会出现随机情况
- UITextView 自适应高度 及显示html内容
- 如何使用git send-email
- 简单魔方程序
- 京东MYSQL分布式数据库:集群系统技术交流
- c++11 container liber: std::queue std::map std::vector std::unique_ptr
- 使用 @Repository、@Service、@Controller 和 @Component
- html学习教程6之背景-颜色
- iOS数据存取和对象序列化
- Partition List
- koa 路由入门
- mybatis在xml文件中处理大于号小于号的方法
- 服务器架设笔记——打通MySQL和Apache
- POJ3675 Telescope(计算几何)