Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2017, 15:40   #1
Dimasik_777
Пользователь
 
Регистрация: 20.01.2017
Сообщений: 10
По умолчанию Компилятор ругается на цикл for - C++

Есть код:
Код:
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <iterator>
#include <algorithm>
 
bool length_compare (const std::string&, const std::string&);
bool words_count_compare(const std::vector<std::string>&, const std::vector<std::string>&);
 
int main()
{
    setlocale (LC_ALL, "RUS");
    std::ifstream in("D://lab.txt");
    
    std::vector<std::vector<std::string> > lines;
    std::string line;
    int lineNumber = 0;
    while(std::getline(in, line))
    {
        std::cout << line << std::endl;
        std::istringstream iss(line);
        std::istream_iterator<std::string> iter(iss), eof;
        std::vector<std::string> line_vector(iter, eof);
        std::sort(line_vector.begin(), line_vector.end(), length_compare);
        std::ostringstream ost;
        ost << ++lineNumber;
        line_vector.insert(line_vector.begin(), ost.str());
        lines.push_back(line_vector);
    }
    std::cout << std::endl;
    std::cout << std::endl;
    std::sort(lines.begin(), lines.end(), words_count_compare);
    for (std::vector<std::string> line : lines)                                      // на вот этот
    {
        for(std::string word : line)                                                       // и на этот
            std::cout << word << " ";
        std::cout << std::endl;
    }
    return 0;
}
 
bool length_compare (const std::string &s1, const std::string &s2)
{
    return s1.size() < s2.size();
}
 
bool words_count_compare(const std::vector<std::string> &v1, const std::vector<std::string> &v2)
{
    return v1.size() < v2.size();
}
И ошибки:
Изображения
Тип файла: jpg 2.jpg (15.5 Кб, 63 просмотров)
Dimasik_777 вне форума Ответить с цитированием
Старый 27.05.2017, 16:36   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Вам же явно написали: в С++98 не было улучшенного фора. Либо говорите компилятору, что используете новый стандарт, либо не используйте фишки нового.
p51x на форуме Ответить с цитированием
Старый 27.05.2017, 19:36   #3
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Цитата:
Сообщение от Dimasik_777 Посмотреть сообщение
Код:
std::ifstream in("D://lab.txt");
- по-моему тут нужен обратный слэш. Напиши вначале программы после всех #include: using namespace std; чтобы не писать этот бред, т.е. чтобы не писать каждый раз std.
Cuprum5 вне форума Ответить с цитированием
Старый 27.05.2017, 22:00   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
по-моему тут нужен обратный слэш
нет. можно и такой, только экранировать его не надо

Цитата:
Напиши вначале программы после всех #include: using namespace std; чтобы не писать этот бред, т.е. чтобы не писать каждый раз std.
По губам и рукам за такие советы.
p51x на форуме Ответить с цитированием
Старый 28.05.2017, 04:51   #5
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Во первых, такие циклы начинаются со стандарта 11, т.е. нужно указать в настройках, что это С++11.
Во-вторых
Код:
 for (const std::vector<std::string>& line : lines)                                      // на вот этот
    {
        for(const std::string word& : line)                                                       // и на этот
            std::cout << word << " ";
        std::cout << std::endl;
    }
оформляйте параметр цикла как ссылку, в таком виде. Иначе, будут лишние копирования + может быть совсем не тот результат, что хотели (т.к. word в вашем случае - копия, а не оригинал).
alexzk вне форума Ответить с цитированием
Старый 28.05.2017, 09:23   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
оформляйте параметр цикла как ссылку
а еси ему это не надо? а если ему нужно копирование?

Цитата:
в таком виде
лучше через auto (прочитав как оно работает!), а то могут быть вариант
p51x на форуме Ответить с цитированием
Старый 31.05.2017, 08:40   #7
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
а еси ему это не надо? а если ему нужно копирование?


лучше через auto (прочитав как оно работает!), а то могут быть вариант
К auto тоже ссылку нада типа const auto&, иначе, вероятнее всего, будет копирование. Уже сталкивался - дебажил...
alexzk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шаблоны с++ ругается компилятор DmitryEfimow Помощь студентам 2 06.11.2015 10:02
компилятор ругается novak3 Общие вопросы C/C++ 4 21.05.2011 01:58
Ругается компилятор.. CormiX Помощь студентам 0 14.05.2011 16:13
компилятор ругается на AnsiString CodeNOT Общие вопросы C/C++ 6 04.01.2011 01:50
Ругается компилятор JSM Общие вопросы Delphi 2 17.06.2007 23:04