Форум программистов, компьютерный форум CyberForum.ru

Можно ли создать список массива строк и если да, то как? - C++

Восстановить пароль Регистрация
 
NotNull
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 8
16.05.2014, 01:17     Можно ли создать список массива строк и если да, то как? #1
Заранее прошу прощения если вопрос глупый, но ответа на него я не нашел.
Можно ли создать список массива строк и если да то как?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2014, 01:17     Можно ли создать список массива строк и если да, то как?
Посмотрите здесь:

C++ как можно считывать инфу с файла в виде массива строк?
Выяснить можно ли с поля (k,l) одним ходом ферьзя попасть на поле(m,n). Если нет, то выяснить, как это можно сделать за два хода C++
C++ нужно создать таблицу из 3 строк и 4 столбцов и заполнить её (любой информацией,это неважно) . Как это можно сделать ?
C++ Создать класс, который определяет можно ли по введенным значениям построить треугольник, и если можно, то какой
Если количество строк в массиве четное, то поменять строки массива по правилу C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
16.05.2014, 01:31     Можно ли создать список массива строк и если да, то как? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
NotNull,
C++
1
std::list<std::vector<std::string> > >
NotNull
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 8
16.05.2014, 01:56  [ТС]     Можно ли создать список массива строк и если да, то как? #3
Цитата Сообщение от outoftime Посмотреть сообщение
std::list<std::vector<std::string> > >
А как такое заполнить?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.05.2014, 02:00     Можно ли создать список массива строк и если да, то как? #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
http://www.cplusplus.com/reference/string/string/
http://www.cplusplus.com/reference/v...tor/?kw=vector
http://www.cplusplus.com/reference/list/list/
NotNull
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 8
16.05.2014, 03:14  [ТС]     Можно ли создать список массива строк и если да, то как? #5
И после этих вопросов вполне логичный вопрос напрашивается: как такое вывести?
Как правильно итератор написать?
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
16.05.2014, 03:53     Можно ли создать список массива строк и если да, то как? #6
NotNull, в с++11 так
C++
1
2
3
    for (auto row: collection)
        for (auto string: row)
            // output
в с++98 так
C++
1
2
3
4
5
6
7
    for (std::list<std::vector<std::string> >::iterator row = collection.begin(); 
        row != collection.end(); row += 1) 
    {
        for (std::vector<std::string>::iterator string = row->begin(); 
            string != row->end(); string += 1)
            // output (*string)
    }
Добавлено через 2 минуты
P.S. если будешь часто использовать std::list<std::vector<std::string> > и\или std::vector<std::string> их лучше затайпдефить
C++
1
typedef std::list<std::vector<std::string> > LVS; // list vector string
NotNull
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 8
16.05.2014, 22:19  [ТС]     Можно ли создать список массива строк и если да, то как? #7
Огромное спасибо, все работает

Добавлено через 8 часов 44 минуты
outoftime, А как теперь удалить какой то элемент c этого вектора?
Например такой вот так не откомпилиться:
C++
1
2
3
4
5
6
 for (auto row : lst)
        for (auto string : row)
            if (string.at(0) == string.at(string.size() - 1))
            {
                row.erase(string);
            }
monolit
179 / 179 / 21
Регистрация: 24.03.2011
Сообщений: 641
Завершенные тесты: 1
16.05.2014, 22:48     Можно ли создать список массива строк и если да, то как? #8
remove_if тебе в помощь. Так не получится без извращений, ибо в for'е ты по итераторам идешь, а после erase итераторы меняются, следовательно, возникает полнейшая каша (лучше сформулировать не смог)...
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
17.05.2014, 01:08     Можно ли создать список массива строк и если да, то как? #9
NotNull, monolit, все верно, в for (auto string : row) так сделать не получится.

http://en.cppreference.com/w/cpp/container/vector/erase
Return value
Iterator following the last removed element.
Т.е. достаточно пройти по коллекции руками.

C++
1
2
3
4
5
6
    std::vector<std::string>::iterator it = row.begin();
    while (it != row.end()) {
        if (it->front() == it->back())
            it = row.erase(it);
        else ++it;
    }
NotNull
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 8
17.05.2014, 21:14  [ТС]     Можно ли создать список массива строк и если да, то как? #10
outoftime, используя это результат получился такой:
C++
1
2
3
4
5
6
7
8
9
10
for (auto row : lst)
    {
        std::vector<std::string>::iterator it = row.begin();
        while (it != row.end())
        {
            if (it->front() == it->back())
                it = row.erase(it);
            else ++it;
        }
    }
Но коллекция остается той же что и до удаления. То есть в дебагере все удаляет с вектора, но когда начинает идти по внешнему циклу т.е. по списку(lst), там оно остается (при просмотре в дебагере или потом при выводе).
Я что то не учёл?
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
17.05.2014, 21:43     Можно ли создать список массива строк и если да, то как? #11
NotNull, дальше идет чисто ИМХО: фор по листу может идти по list.cbegin(), list.cend(), т.е. по константным итераторам, т.е. элементы коллекции модифицировать нельзя. Попробуй изменить внешний цикл по такой же схеме.
C++
1
2
3
4
5
6
    typedef std::vector<std::string> VS;
    typedef std::list<VS> LVS;
    for (LVS::iterator row = list.begin(); row != list.end(); ++row) 
        for (VS it = row->begin(); it < row->end(); ++it) 
            if (it->front() == it->back())
                it = row.erase(it);
Код не тестировал.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2014, 22:29     Можно ли создать список массива строк и если да, то как?
Еще ссылки по теме:

C++ Можно ли определить размер динамического двумерного массива, количество строк и столбцов?
Создать список целых чисел. Создать новый список, записав в него отрицательные элементы C++
Как создать динамический массив типа string? Как создать класс такого массива? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
NotNull
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 8
17.05.2014, 22:29  [ТС]     Можно ли создать список массива строк и если да, то как? #12
Всё работает.
Чуть-чуть подправил:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
typedef std::vector<std::string> VS;
    typedef std::list<VS> LVS;
    for (LVS::iterator row = lst.begin(); row != lst.end(); ++row)
    {
 
        VS::iterator it = row->begin();
        while (it != row->end())
        {
            if (it->front() == it->back())
                it = row->erase(it);
            else ++it;
        }
    }
Огромное спасибо за помощь!
Yandex
Объявления
17.05.2014, 22:29     Можно ли создать список массива строк и если да, то как?
Ответ Создать тему
Опции темы

Текущее время: 09:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru