2012-12-05 61 views
0

如何複製從字符數組到字符串的字符範圍?起始索引始終爲0並轉到某個傳遞的值x。我在堆上有char *緩衝區(大小爲32 * 1024),我使用該緩衝區接收消息並將變量x中收到的消息大小。如何從第0個字到第x個字複製到vector<char> mainBuffer? (我可以簡單地重複,但它看起來低效的方式,如果消息是長的。另一種方法是像下面,但後來我總是在每一個傳球創造新的向量)如何複製從char數組到字符串的字符範圍?

char* buffer = new char[32*1024]; 
int x; 
std::vector<std::vector<char> > mainBuffer; 
//:loop 
// here is some code where I recive message in buffer and set x 
mainBuffer.push_back(std::vector<char>(buffer,buffer+x)); 
//:end loop 

有誰知道更高效,更優雅的方式來做到這一點?

+0

在C++ 11中,矢量將被移動,所以它不是低效的。 –

+1

你的問題讓我困惑。 'mainBuffer'是'vector '還是'vector >'? –

回答

2
mainBuffer.push_back(std::vector<char>(buffer,buffer+x)); 

以上的長度的有誰知道更高效,更優雅的方式來做到這一點?

用C++ 11,執行:

mainBuffer.emplace_back(buffer,buffer+x); 

此轉發的參數和構造直接內部mainBuffer的對象。

編輯:用C++(舊),使用std ::互換:

mainBuffer.push_back(std::vector<char>()); 
mainBuffer.back().swap(std::vector<char>(buffer, buffer+x)); 

編輯2:如果可以的話,在mainBuffer調用儲備使用它的push_back之前。

1

如果你真的在尋找高效化,那麼在協議執行此操作的典型方式是:

char* mainBuffer = new char[veryLargeNumber] 
char* mainBufferPos = mainBuffer; 
char* buffer = new char[normallyASmallNumber] 
while(...) { 
    ...receive n bytes in buffer.... 
    memcopy(mainBufferPos, buffer, n); 
    mainBufferPos += n; 
    if (mainBufferPos > mainBuffer+veryLargeNumber) 
     break; // buffer full, needs probably more handling... 
} 

通常情況下,我預計32 * 1024是你的大緩衝區的大小多,而收到的郵件都低於1024

相關問題