Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вопросы по синтаксису, правильно или нет  
:(
    Опции темы
nexen
Дата 20.7.2009, 02:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 15.7.2009

Репутация: нет
Всего: нет



Код

#include<iostream>
#include<vector>
using namespace std;
int main(){
    vector<int> s;
    int i = 0;
    for(; i < 10; i++){
        s.push_back(i);
    }
    cout << "vecror s " << "created with size " << s.size() << "!\n";
    vector<int>::iterator a, b, c;
    a = s.begin();
    c = s.end();
    string cval_a = ", ";
    random_shuffle(a, c);
    for(b = a; b < c; b++){
        (b < (c - 1)) ? cval_a : cval_a = "\n";
        cout << *b << cval_a;
    }
    sort(a, c);
    cval_a = ", ";
    for(b = a; b < c; b++){
        (b < (c - 1)) ? cval_a : cval_a = "\n";
        cout << *b << cval_a;
    }
    system("pause");
}


выведет

vecror s created with size 10!
8, 1, 9, 2, 0, 5, 7, 3, 4, 6
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Для продолжения нажмите любую клавишу . . .

p.s.
это моё первое знакомство с с++ - делаю простые упражнения усложняя их самостоятельно. вопрос - насколько грамотно написан этот код , что лишнее, чего нехватает, правильно ли обьявлены типы?
ОС windows компиллятор gcc (dev-cpp).

Это сообщение отредактировал(а) nexen - 20.7.2009, 02:28
PM MAIL   Вверх
Cheloveck
Дата 20.7.2009, 06:46 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: 3
Всего: 32



Цитата(nexen @  20.7.2009,  03:21 Найти цитируемый пост)
(b < (c - 1)) ? cval_a : cval_a = "\n";

Если b меньше c - 1, то ничего не делаем, иначе  cval_a присваивается символ перехода строки. Глупость какая-то =) Такой синтаксис используется когда 2, и только 2, варианта, например
Код

int x = ( a > b ) ? 10 : 20;


Цитата(nexen @  20.7.2009,  03:21 Найти цитируемый пост)
    int i = 0;
    for(; i < 10; i++){
        s.push_back(i);
    }

Первая позиция в for специально для того, что бы объявлять переменную, если ты не собираешься её использовать за пределами цикла, то такая запись не красивая.

P.S. Побежал на работу, дальше смотреть некогда уже(((


--------------------
user posted image
PM Jabber   Вверх
GoldFinch
Дата 20.7.2009, 07:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



вместо
Код

    string cval_a = ", ";
    for(b = a; b < c; b++){
        (b < (c - 1)) ? cval_a : cval_a = "\n";
        cout << *b << cval_a;
    }

можно
Код

    for( b=a; b!=c &&  cout<<',' ; ++b )
        cout << *b;

или
Код

    for( b=a; b!=c; )
    {
        cout << *b++;
        if (b != c)
              cout<<',';
    }


вместо a. b, c лучше юзать осмысленные названия
вместо iterator - const_iterator
вместо использования a и с в цикле получать итераторы по-новой

PM MAIL ICQ   Вверх
andrew_121
Дата 20.7.2009, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



Цитата(nexen @  20.7.2009,  02:21 Найти цитируемый пост)
(b < (c - 1)) ? cval_a : cval_a = "\n";

Эти строки только путают. Смысла в них не вижу.

Добавлено @ 08:06
Я бы сделал так:
Код

#include <iostream>    /* Для 'std::cout               */
#include <vector>      /* Для 'std::vector'            */
#include <algorithm>   /* Для 'std::generate()'        */

struct Generator {
    Generator():val(0) {}
    
    int operator()() {
        return val++;
    }
    int val;
};

void printer(int v) {
    std::cout << v << std::endl;
}

int main(int argc, const char **argv) {
    const int size = 100;
    std::vector<int> ivector(size);

    Generator generator;
    /* Заполняем вектор */
    std::generate(ivector.begin(), ivector.end(), generator);
    
    /* Тусуем */
    std::random_shuffle(ivector.begin(), ivector.end());
    
    /* Выводим в консоль. */
    std::for_each(ivector.begin(), ivector.end(), printer);

    return 0;
}



Это сообщение отредактировал(а) andrew_121 - 20.7.2009, 08:09


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
nexen
Дата 20.7.2009, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 15.7.2009

Репутация: нет
Всего: нет



Цитата(Cheloveck @ 20.7.2009,  06:46)
Цитата

дальше смотреть некогда уже(((

ога - насчет i согласен и чё это я её вынес сам не пойму . . . , а насчет   cval_a  ты видимо проглядел обьявление string cval_a = ", ";
p.s.
int i = 0; - толкаю в цикл , - продолжаем катать дальше ! ))

Это сообщение отредактировал(а) nexen - 20.7.2009, 08:29
PM MAIL   Вверх
azesmcar
Дата 20.7.2009, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(andrew_121 @  20.7.2009,  08:01 Найти цитируемый пост)
 std::for_each(ivector.begin(), ivector.end(), printer);

зачем так сложно?
Код

std::copy(ivector.begin(), ivector.end(), std::ostream_iterator<int>(std::cout, "\n"));

и функция printer не нужна.
Цитата(andrew_121 @  20.7.2009,  08:01 Найти цитируемый пост)
Generator generator;
    /* Заполняем вектор */
    std::generate(ivector.begin(), ivector.end(), generator);

это можно заменить на
Код

std::generate(ivector.begin(), ivector.end(), Generator());


PM   Вверх
andrew_121
Дата 20.7.2009, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



Цитата(azesmcar @  20.7.2009,  08:30 Найти цитируемый пост)
std::copy(ivector.begin(), ivector.end(), std::ostream_iterator<int>(std::cout, "\n"));

Такая форма записи пугает новичков.
Да и я ее использую только если другого способа нет.




--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
azesmcar
Дата 20.7.2009, 08:47 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(andrew_121 @  20.7.2009,  08:44 Найти цитируемый пост)
Такая форма записи пугает новичков.

честно говоря большой разницы между этой формой и for_each не вижу.

Цитата(andrew_121 @  20.7.2009,  08:44 Найти цитируемый пост)
Да и я ее использую только если другого способа нет.

???
PM   Вверх
mrbrooks
Дата 20.7.2009, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



Цитата(azesmcar @  20.7.2009,  08:30 Найти цитируемый пост)
зачем так сложно?    
Код

std::copy(ivector.begin(), ivector.end(), std::ostream_iterator<int>(std::cout, "\n"));



ога. а если так?
Код

BOOST_FOREACH(int i, ivector) std::cout<<i<<std::endl;


ы.

PM MAIL   Вверх
andrew_121
Дата 20.7.2009, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



Цитата(azesmcar @  20.7.2009,  08:47 Найти цитируемый пост)
??? 

хз*...привычка наверное.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
nexen
Дата 20.7.2009, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 15.7.2009

Репутация: нет
Всего: нет



всем спасибо огромное, - дома посмотрю, разберусь кстати, а зачем - 
std::copy(ivector.begin(), ivector.end(), std::ostream_iterator<int>(std::cout, "\n"));
если можно единожды написать вверху using namespace std; и просто писать
copy(ivector.begin(), ivector.end(), ostream_iterator<int>(cout, "\n"));
может я не прав, но по моему так . . .
p.s.
сильно я не боюсь! )) - вобщем пока всё схватываю, - помогают навыки программирования на php и js всем огромное спасибо пишите ещё - буду рад запомнить, понять, освоить ! ))  да пребудет с вами сила ! 
PM MAIL   Вверх
azesmcar
Дата 20.7.2009, 13:39 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(nexen @  20.7.2009,  13:33 Найти цитируемый пост)
если можно единожды написать вверху using namespace std; и просто писать
copy(ivector.begin(), ivector.end(), ostream_iterator<int>(cout, "\n"));
может я не прав, но по моему так . . .

Так, это вопрос стиля и привычки, так-как не очень правильно писать using namespace ... в заголовочных файлах - у меня выработалась привычка не писать его вообще.
PM   Вверх
zim22
Дата 20.7.2009, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



Цитата(nexen @  20.7.2009,  13:33 Найти цитируемый пост)
если можно единожды написать вверху using namespace std; и просто писать

так и делайте. пока не поймёте в чём зло глобальных using директив


--------------------
PM MAIL   Вверх
mes
Дата 20.7.2009, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(nexen @  20.7.2009,  12:33 Найти цитируемый пост)
если можно единожды написать вверху using namespace std; и просто писать

 привыкать к такому не рекомендуется  -  допустимо только на маленьких тестовых программках. smile 


--------------------
PM MAIL WWW   Вверх
azesmcar
Дата 20.7.2009, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(zim22 @  20.7.2009,  13:40 Найти цитируемый пост)
так и делайте. пока не поймёте в чём зло глобальных using директив 

ну cpp файле глобальный using никому (кроме себя любимого) не мешает, так что это индивидуально, а в заголовочных файлах - зло smile
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0744 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.