Обработка вектора по три элемента за одну итерацию цикла

199
11 апреля 2018, 09:07
#include <iostream>
#include <string>
#include <vector>
#include <istream>
#include <sstream>
std::vector<std::string> split(const std::string &string_to_cut, char delimiter)
{
        std::istringstream create_stream(string_to_cut);
        std::vector<std::string> parts;
        std::string part;
        while (std::getline(create_stream, part, delimiter))
        {
                parts.push_back(part);
        }
        return parts;
}
int main()
{
    std::string g = {"r,2,y,3,w,3"};
    std::vector<std::string> res = split(g,',');
    for (std::vector<std::string>::iterator d = res.begin(); d != res.end(); d=d+3)
    {
        int index = d-res.begin();
        std::cout << d[index+0] << std::endl;
        std::cout << d[index+1] << std::endl;
        std::cout << d[index+2] << std::endl;
    }
    return 0;
}

Результат работы программы:

r
2
y

Вопрос: Почему не обрабатываются следующие три элемента?

Answer 1

Вместо

d[index+0]

нужно писать

res[index+0]

!

И еще - очень неприятное у вас условие - d != res.end() - а если количество элементов на 3 делиться не станет?...

Answer 2

Возможно я не совсем понял вопрос, но такой вариант не подходит?

#include <iostream>
#include <string>
#include <vector>
#include <istream>
#include <sstream>
std::vector<std::string> split(const std::string &string_to_cut, char delimiter)
{
        std::istringstream create_stream(string_to_cut);
        std::vector<std::string> parts;
        std::string part;
        while (std::getline(create_stream, part, delimiter))
        {
                parts.push_back(part);
        }
        return parts;
}
int main()
{
    std::string g = {"r,2,y,3,w,3"};
    std::vector<std::string> res = split(g,',');
    for (std::vector<std::string>::iterator d = res.begin(); d != res.end(); d=d+3)
    {
        std::cout << *(d+0) << std::endl;
        std::cout << *(d+1) << std::endl;
        std::cout << *(d+2) << std::endl;
    }
    return 0;
}
READ ALSO
Задача С++. Сегментация данных

Задача С++. Сегментация данных

Текст задачи приведён нижеЗадача со степика, ссылку на задачу оставлю ниже, т

185
Проблемка с с++ в visual studio 2017

Проблемка с с++ в visual studio 2017

Пишет ошибку, но не пойму как её исправить? Может кто из профи знает?

211
Реализация calloc, malloc [дубликат]

Реализация calloc, malloc [дубликат]

На данный вопрос уже ответили:

189