Этот буфер должен содержать слоты (три в этом примере) равной длины (20 в этом примере)
Буфер должен иметь непрерывную память, чтобы его можно было передать функции C неконстантным способом.
const int slot_size = 20;
std::vector<char> vbuffer;
Эта функция принимает строку, копирует во временный буфер требуемого размера, затем добавляет ее к vbuffer
void prepBuffer( const std::string& s)
{
std::vector<char> temp(slot_size);
std::copy(s.c_str(), s.c_str() + s.length() + 1, temp.begin());
vbuffer.insert(vbuffer.end(), temp.begin(), temp.end());
}
Проверка функции
int main()
{
vbuffer.reserve(60);
prepBuffer( "Argentina");
prepBuffer( "Herzegovina");
prepBuffer( "Zambia");
cout << &vbuffer[0] << endl;
cout << &vbuffer[20] << endl;
cout << &vbuffer[40] << endl;
}
Вопрос. В моей функции prepBuffer
много копий строк. Я ищу лучший способ заполнить vbuffer
с минимальным копированием
EDIT
Размер слотов определяется в другом месте программы. Но это не известно во время компиляции.
EDIT
В соответствии с моим принятым ответом ниже, я остановился на этой версии
void prepBuffer(const std::string& s)
{
assert(s.size() < slot_size );
vbuffer.insert(vbuffer.end(), s.begin(), s.end());
vbuffer.insert(vbuffer.end(), slot_size - s.size(), '\0' );
}
Предложения все еще приветствуются