std::vector<typename T>
является контейнером произвольного доступа, однако вам необходимо использовать смещение для доступа к элементам в заданных позициях. Например, если вы хотите получить элемент номер пять, вы пишете что-то вроде:
std::vector<int> data;
data[5] = 10;
Но в вашем примере вы используете итератор. Думайте об итераторе как о указателе на ваш Post
объект. Вы не можете использовать этот указатель в качестве индекса элемента в вашем векторе. Поэтому ваш код должен выглядеть следующим образом:
std::string genBlankName (std::vector<Post> &posts)
{
std::string baseName = "New Post ";
int postNum = 1;
for (std::vector<Post>::iterator currentPost = posts.begin();
currentPost != posts.end(); currentPost++)
{
if (currentPost->name.substr(0, baseName.length()) == baseName &&
utils::is_num(currentPost->name.substr(baseName.length(), std::string::npos)) &&
utils::to_int(currentPost->name.substr(baseName.length(), std::string::npos)) > postNum)
{
postNum = utils::to_int(currentPost->name.substr(baseName.length(), std::string::npos));
}
}
return baseName + utils::to_string(postNum);
}
Или вы можете использовать индексы, но тогда вы не можете использовать итераторы, например:
std::string genBlankName (std::vector<Post> &posts)
{
std::string baseName = "New Post ";
int postNum = 1;
for (size_t currentPost = 0; currentPost < posts.size (); ++currentPost)
{
if (posts[currentPost].name.substr(0, baseName.length()) == baseName &&
utils::is_num(posts[currentPost].name.substr(baseName.length(), std::string::npos)) &&
utils::to_int(posts[currentPost].name.substr(baseName.length(), std::string::npos)) > postNum)
{
postNum = utils::to_int(posts[currentPost].name.substr(baseName.length(), std::string::npos));
}
}
return baseName + utils::to_string(postNum);
}
Надеюсь, это поможет. Удачного кодирования!