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

Липпман для начинающих. С функцией. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Aruzid
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 4
30.10.2010, 05:24     Липпман для начинающих. С функцией. #1
Всем привет. Просьба сильно не пинать, но я слегка подзабыл элементарщину. Липпман в одном из своих упражнений просит переписать функцию putValues(vector<int>) в putValues(list<string>) так, чтобы переписанная в лист функция печатала два своих значения в цикле.

putValues(vector<int> vec)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <vector>
 
const lineLength =12; //количество элементов в строке
void putValues( vector<int> vec )
{
    cout << "( " << vec.size() << " )";
    for ( int i = 0; i < vec.size(); ++1 ) {
        if ( i % lineLength == 0 && i )
            cout << "\n\t"; // строка заполнена
 
    cout << vec[ i ];
 
    // разделитель, печатаемый после каждого элемента,
    // кроме последнего
    if ( 1 % lineLength != lineLength-1 &&
      i != vec.size()-1 )
        cout << ", ";
    }
    cout << " \n";
}


А эту я подправил почти что в лучших традициях быдлокодерства
putValues(list<string>_list)
C++
1
2
3
4
5
6
7
8
9
void putValues( std::list<std::string> _list)
{
    std::string ia[2] = {"first string", "second string"};
    std::cout<< "( " << _list.size() << " )\n";
    for (int i = 2; i < 2; ++i) {
        _list.push_back(ia[i]);
    std::cout << _list.size() << std::endl;
    }
}


Погуглил, не нашёл! А в учебнике Липпмана отсутствуют решения
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.10.2010, 05:24     Липпман для начинающих. С функцией.
Посмотрите здесь:

C++ С/С++ для начинающих
с++ для начинающих C++
C++ Консультации.[Липпман/Лажойе]
Липпман или Шилдт C++
C++ перегрузка операции ++ (Липпман)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
30.10.2010, 07:44     Липпман для начинающих. С функцией. #2
А можно поконкретней, в чем состоит задание (а то не у всех дома Липпман есть)?
Aruzid
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 4
30.10.2010, 14:49  [ТС]     Липпман для начинающих. С функцией. #3
Цитата Сообщение от Nameless One Посмотреть сообщение
А можно поконкретней, в чем состоит задание (а то не у всех дома Липпман есть)?
Да, конечно. Цитирую:
Перепишите функцию putValues( vector<int> ), приведенную в подразделе 7.3.4,
так, чтобы она работала с контейнером list<string>. Печатайте по одному значению на
строке. Вот пример вывода для списка из двух строк:
( 2 )
<
"first string"
"second string"
>

Функция putValues( vector<int> ), приведённая в том подразделе и есть функция, которую я скопировал в спойлер сверху.
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
30.10.2010, 17:03     Липпман для начинающих. С функцией. #4
Цитата Сообщение от Aruzid Посмотреть сообщение
Да, конечно. Цитирую:
Перепишите функцию putValues( vector<int> ), приведенную в подразделе 7.3.4,
У меня нет Липпмана, я не знаю, что приведено в подразделе 7.3.4!
Может ты просто опишешь задание так, чтобы было понятно тем, у кого нет учебника имени Л.?
Aruzid
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 4
30.10.2010, 20:01  [ТС]     Липпман для начинающих. С функцией. #5
Цитата Сообщение от Nameless One Посмотреть сообщение
У меня нет Липпмана, я не знаю, что приведено в подразделе 7.3.4!
Может ты просто опишешь задание так, чтобы было понятно тем, у кого нет учебника имени Л.?
Я же написал, у меня сверху в спойлере есть эта функция - это всё, что есть в этом задании. Её не видно, я не понимаю? Вот перепишу:

CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Функция в подразделе 7.3.4(!)
#include <iostream>
#include <vector>
 
const lineLength =12; //количество элементов в строке
void putValues( vector<int> vec )
{
    cout << "( " << vec.size() << " )";
    for ( int i = 0; i < vec.size(); ++1 ) {
        if ( i % lineLength == 0 && i )
            cout << "\n\t"; // строка заполнена
 
    cout << vec[ i ];
 
    // разделитель, печатаемый после каждого элемента,
    // кроме последнего
    if ( 1 % lineLength != lineLength-1 &&
      i != vec.size()-1 )
        cout << ", ";
    }
    cout << " \n";
}
Ещё раз - задание в том, что бы переписать putValues( vector<int> vec) так, чтобы она работала не с вектором, а с листом. Функция сверху. Я всё привёл из раздела. И функция putValues должна печатать по одному значению на каждую строку. Если точнее, то putValues(list<string>) должна напечатать:
first string
second string
Надеюсь, что разъяснил

Добавлено через 17 минут
Забыл добавить, что ввод отсутствует, то есть в main() создаётся list<string>_list ( 2 ), потом putValues( _list ). И уже в функции в контейнер добавляются строки, впоследствии чего эти значения выводятся на экран.
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
30.10.2010, 20:18     Липпман для начинающих. С функцией. #6
Цитата Сообщение от Aruzid Посмотреть сообщение
Я же написал, у меня сверху в спойлере есть эта функция - это всё, что есть в этом задании. Её не видно, я не понимаю? Вот перепишу:
а нельзя было сразу русским языком написать, что должна делать программа? Кстати, может я тупой, но мне и сейчас непонятно, что она должна делать.
А теперь будем анализировать текст:
C++
1
if ( i % lineLength == 0 && i )
Мне одному кажется, что правая часть условного выражения будет всегда давать false? Может лучше переписать предыдущее условие так:
C++
1
if(! (i % lineLength))
C++
1
2
if ( 1 % lineLength != lineLength-1 &&
 i != vec.size()-1 )
1 % lineLength всегда будет либо 1, либо 0, а lineLength -1 будет всегда равно 11, т.к. lineLength - константа. Т.е. предыдущее условие можно переписать так:
C++
1
if (i != vec.size()-1 )
Это получается не учебник, а какой-то сборник быдлокода...
Цитата Сообщение от Aruzid Посмотреть сообщение
. И функция putValues должна печатать по одному значению на каждую строку
Вот, я написал программу, которая делает то, что тебе нужно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <list>
#include <string>
#include <algorithm>
 
template<class T>
struct print
{
    void operator() (const T& rhs)
    {
        std::cout << rhs << std::endl;
    }
};
 
void putValues(const std::list<std::string>& _list)
{
    std::for_each(_list.begin(), _list.end(), print<std::string>());
}
 
int main()
{
    std::list<std::string> list;
    list.push_back("foo");
    list.push_back("bar");
    putValues(list);
    return 0;
}
Печатает по одному значению на строку
Aruzid
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 4
30.10.2010, 20:37  [ТС]     Липпман для начинающих. С функцией. #7
Цитата Сообщение от Nameless One Посмотреть сообщение
а нельзя было сразу русским языком написать, что должна делать программа? Кстати, может я тупой, но мне и сейчас непонятно, что она должна делать.
Нуу. Извиняюсь, да, моя вина
Цитата Сообщение от Nameless One Посмотреть сообщение
Мне одному кажется, что правая часть условного выражения будет всегда давать false?
Не только тебе, но я старался не отходить от канонов учебника. Бывают примеры ещё хуже. Впрочем Липпман намекал, что будет немного троллить читающего хитрыми примерами вначале учебника. Может редакция сдала, даже не знаю.

Цитата Сообщение от Nameless One Посмотреть сообщение
Вот, я написал программу, которая делает то, что тебе нужно:
А вот за это большущее спасибо, как раз то, что нужно было!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.10.2010, 20:39     Липпман для начинающих. С функцией.
Еще ссылки по теме:

Лефоре или Липпман? C++
C++ Язык программирования С++. Вводный курс 4-е изд. Стенли Липпман[2007]
Изучение С++11: Липпман или Прата? C++

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

Или воспользуйтесь поиском по форуму:
Nameless One
30.10.2010, 20:39     Липпман для начинающих. С функцией.
  #8

Не по теме:

Цитата Сообщение от Aruzid Посмотреть сообщение
Не только тебе, но я старался не отходить от канонов учебника. Бывают примеры ещё хуже. Впрочем Липпман намекал, что будет немного троллить читающего хитрыми примерами вначале учебника.
ИМХО, странный учебник. Сам не читал, но вот уже этот пример меня наталкивает на нелестные отзывы об авторе

Yandex
Объявления
30.10.2010, 20:39     Липпман для начинающих. С функцией.
Ответ Создать тему
Опции темы

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