小编Vie*_* Ha的帖子

如何有效地处理像C缓冲区这样的std :: vector?

使用C缓冲区,我经常这样做:

BYTE buffer[MAX_SIZE];
int dataSize = 0;

while (appRunning()) 
{
    dataSize += Receive(buffer + dataSize, MAX_SIZE - dataSize);

    int processedSize = ProcessBuffer(buffer, dataSize);
    ASSERT(processedSize <= dataSize);
    dataSize -= processedSize;
    memmove(buffer, buffer + processedSize, dataSize);
};
Run Code Online (Sandbox Code Playgroud)

是否有可能在std::vector不失去太多性能的情况下这样做?

编辑:我找到了一种方法来替换原始C缓冲区std::vector.

std::vector<BYTE> vbuf;
vbuf.reserve(MAX_SIZE); // allocated at once

while (appRunning()) 
{
    int pendingSize = GetPendingDataSize(); // from a socket
    if (pendingSize > vbuf.capacity())
        pendingSize = vbuf.capacity();

    vbuf.resize(pendingSize);
    int recvSize = Receive(vbuf.data(), vbuf.size());
    ASSERT(recvSize < vbuf.size());
    int processedSize = ProcessBuffer(vbuf.data(), vbuf.size()); …
Run Code Online (Sandbox Code Playgroud)

c++ stl c++11

6
推荐指数
1
解决办法
1284
查看次数

为什么输出与我的期望不同?

我有一个这样的简单程序:

#include "stdafx.h"
#include <iostream>

using namespace std;

int main()
{
    class B {
    protected:
        int     data = 0;
    public:
        B() { cout << "B() ctor\n";}
        virtual ~B() { cout << "~B()\n"; }
        virtual void method() { cout << "data in B: " << data << "\n"; }
    };

    class A : public B 
    {
        int dataA = 2;
    public:
        A() { cout << "A() ctor\n"; }
        ~A() { cout << "~A()\n"; }
        void method() { cout << "data in …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

1
推荐指数
2
解决办法
93
查看次数

标签 统计

c++ ×2

c++11 ×2

stl ×1