Когда я очищаю vector<string>
, емкость vector
сохраняется, но способности отдельных string
s в векторе не сохраняются.Есть ли способ достичь этого?
Я не могу придумать, как этого добиться простым и понятным способом.Вот некоторый тестовый код, который демонстрирует, что я пытаюсь сделать:
#include <string>
#include <iostream>
#include <sstream>
#include <vector>
using namespace std;
int main()
{
istringstream input;
input.str(
R"(2
This is the first sentence.
And this is the second sentence.
3
Short text.
Another short text.
The end!
)");
vector<string> lines;
string line; // The capacity of this string is preserved throughout.
while (getline(input, line))
{
int count = stoi(line);
lines.clear(); // This clears capacity of the string elements too!
for (int i = 0; i < count; ++i)
{
getline(input, line);
lines.push_back(line);
}
// process/print 'lines' here.
}
return 0;
}
Один из способов сохранить емкость элементов string
состоит в том, чтобы никогда не очищать vector
и отслеживать размерvector
вручную.Но это не было бы чисто.Есть ли чистое решение этой проблемы?
Редактировать:
Если я переставлю код следующим образом, я смогу сохранить вместимость строк ввектор.Однако это очень некрасиво.Я ищу чистое решение.
...
vector<string> lines;
string line; // The capacity of this string is preserved throughout.
while (getline(input, line))
{
int count = stoi(line);
for (int i = 0; i < count; ++i)
{
if (i < lines.size())
{
getline(input, lines[i]);
}
else
{
lines.emplace_back();
getline(input, lines.back());
}
}
// process/print 'lines' here.
// Size is 'count'.
}
...