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

как элегантно писать код STL - C++

Восстановить пароль Регистрация
 
Santer.Net
15 / 15 / 1
Регистрация: 18.11.2010
Сообщений: 122
24.03.2011, 23:39     как элегантно писать код STL #1
Здравствуйте. Подскажите как правильнои оптимально
записать следущие частички кода с использованием СТЛ
Скажем,в качестве массив используем вектор vec в качестве обычного a

1)Считать элементи с потока
C++
1
2
3
4
5
6
7
8
9
for(int i=0;i<N;i++)
cin>>a[i];
Как записать правильней с помощью СТЛ
int inp;
for(int i=0;i<N;i++)
{
cin>>inp;
vec.pusg_back(inp);
}
2)Присвоить элемент
C++
1
2
3
4
5
6
int* a;
*(a+3)=1;
*(a+0)=434343;
*(a+1)=4343;
 
На Си такая запись прокатит в незаполненом массиве,как правильно записать с помощью СТЛ
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2011, 23:39     как элегантно писать код STL
Посмотрите здесь:

Как устроен вектор (STL) ? C++
Код класса большие числа из книги Л.Аммерааля Stl для программистов C++
Как писать код по стандарту C++
Можно ли писать такой код,мне в дальнейшем надо будет наследовать x и y, а другие два елемента нет C++
Где можно найти код реализации библиотеки STL C++
C++ Переписать готовую функцию более элегантно
Как грамотней писать код? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
 Аватар для asics
2841 / 1778 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
24.03.2011, 23:44     как элегантно писать код STL #2
Модно как-то так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <vector>
#include <algorithm>
 
int main(){
  std::vector<int> vec;
  const size_t N = 5;
  vec.resize(N);
  struct Func{
    int operator() (){
      int temp;
      std::cin >> temp;
      return temp;
    }
    void operator() (int a){
      std::cout << a << ' ';
    }
  };
  std::generate_n(vec.begin(), N, Func());
  std::for_each(vec.begin(), vec.end(), Func());
  return 0;
}
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1345 / 878 / 51
Регистрация: 02.01.2009
Сообщений: 2,642
Записей в блоге: 1
24.03.2011, 23:56     как элегантно писать код STL #3
или..
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <vector>
#include <iostream>
#include <algorithm>
 
 
int main(){
    std::vector<int> d;
 
    std::cout << "Enter a sequence of integers (eof to quit): " ;
    std::copy(std::istream_iterator<int>(std::cin),
          std::istream_iterator<int>(), std::inserter(d,d.begin()));
 
    std::copy(d.begin(),d.end(),std::ostream_iterator<int>(std::cout,"\n"));
 
    return 0;
}
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
25.03.2011, 00:13     как элегантно писать код STL #4
C++
1
2
3
4
   std::vector<int> some_list(10);
   std::for_each(some_list.begin(), some_list.end(), [](int &x) {
     std::cin >> x;
   });
Mr.X
Эксперт С++
 Аватар для Mr.X
3011 / 1667 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
25.03.2011, 06:53     как элегантно писать код STL #5
2)
C++
1
2
3
4
5
6
7
std::vector<int>  v;
size_t  pos = 0;
if(pos >= v.size())//Если вы уверены в ложности этого условия, то проверку можно не делать.
{
    v.resize((pos + 1) * 2);
}
v[pos] = 5;
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7933 / 4715 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
25.03.2011, 17:16     как элегантно писать код STL #6
1.
C++
1
std::vector<int> vec((std::istream_iterator<int>(std::cin)), std::istream_iterator<int>());
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.03.2011, 17:48     как элегантно писать код STL
Еще ссылки по теме:

C++ Stl vector как массив
Как отлавливать exceptions от stl? C++
Поясните за код (листинг из Мюссера : Справочное руководство по STL) C++
C++ Начать писать код на c++
C++ Как реализован deque в STL ?

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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16932 / 5337 / 328
Регистрация: 30.03.2009
Сообщений: 14,339
Записей в блоге: 26
25.03.2011, 17:48     как элегантно писать код STL #7
Я не большой специалист по Си++, но не понимаю, почему такие сложные наовроты на простые вопросты:

1. Вместо "Как записать правильней с помощью СТЛ" должен быть подставлен код
C++
1
2
std::vector<int> vec;
vec.resize (10);
2. На Си такая запись прокатит в незаполненом массиве,как правильно записать с помощью СТЛ.

В твоём тесту у тебя указатель a не инициализирован. Если подразумевается, что у тебя всё-таки нормально проинициализированный вектор, то

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
// используем ссылку вместо указателя, чтобы не было возможности использовать
// неинициализировнную память. В правой части присваивания подразумеваем
// некий объект-vector, который ещё незаполнен (т.е. в нём 0 элементов)
std::vector<int> &a = ....;
 
// В исходном примере максимальный индекс - это 3, а потому нам надо выделить
// как минимум 4 элемента в массиве
a.resize (4);
 
// Заполняем элементы
a[3] = 1;
a[0] = 434343;
a[1] = 4343;
Yandex
Объявления
25.03.2011, 17:48     как элегантно писать код STL
Ответ Создать тему
Опции темы

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