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

Как работать с <vector> - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.73
AvengerAlive
5 / 5 / 0
Регистрация: 30.07.2011
Сообщений: 257
14.08.2011, 10:19     Как работать с <vector> #1
Вот есть код (алгоритм Грехема). Про vector как им пользоваться мало где написано, если написано то на английском или ещё каком-нибудь другом языке. Хочу узнать как ввести данные и как это работает (не сам алгорим, а использование vector (мне кажется это массив)).

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <iostream>
#include <vector>
#include <cmath>
#include <list>
#include <algorithm>
#define eps 1e-8;
using namespace std;
 
double area_triangle (point a, point b, point c);
bool ccw (point a, point b, point c);
double dist(point a, point b);
 
class point
{
 public: 
    double x,y;
    int i;
    point(double _x, double _y) 
     {
      x=_x;
      y=_y;
     }
    point()
     {
      point(0, 0);  
     }
};
 
point first;
 
class less_of_ccw
{
 public:
    bool operator () (point a, point b)
     {
      if (a.i==first.i) return true;
      if (b.i==first.i) return false;
      if (ccw(first,a,b)) return true;
      if (ccw(first,b,a)) return false;
      return dist(first,a)>dist(first,b);
     }
};
 
int main()
{
}
 
bool ccw (point a, point b, point c)
{
 return area_triangle(a,b,c)>eps;
}
 
double area_triangle (point a, point b, point c)
{
 return 0.5*(a.x*b.y+b.x*c.y+c.x*a.y-a.y*b.x-b.y*c.x-c.y*a.x); 
}
 
double dist(point a, point b)
{
 return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
 
void hull_graham (vector <point> p, vector <int> &ip)
{
 int n=p.size();
 int i;
 for (i=0; i<n; ++i) p[i].i=i;
 first=p[0];
 for (i=1; i<n; ++i)
 if (first.x>p[i].x || (first.x==p[i].x && first.y>p[i].y)) first=p[i];
 sort (p.begin(), p.end(), less_of_ccw());
 ip.push_back (0);
 for (i=1; i<n && abs(area_triangle(p[0],p[1],p[i]))<=eps; ++i);
 ip.push_back (1);
 int top=1;
 while (i<n)
  {
   if (!ccw(p[ip[top-1]],p[ip[top]],p[i]))
    {
     --top;
     ip.pop_back ();
    }
   else
    {
     ++top;
     ip.push_back (i);
     ++i;
    }
  }
 for (i=0; i<ip.size(); ++i) ip[i]=p[ip[i]].i;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.08.2011, 10:19     Как работать с <vector>
Посмотрите здесь:

C++ vector<vector<double>> + std::sort()
VisualStudio C++ vector<vector<int> > push_back() C++
Работа со столбцами в vector< vector<int> > C++
C++ Запись в vector<vector<char>>
C++ Не работает функция sort (vector, vector)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Bers
Заблокирован
14.08.2011, 10:49     Как работать с <vector> #2
Цитата Сообщение от AvengerAlive Посмотреть сообщение
Вот есть код (алгоритм Грехема). Про vector как им пользоваться мало где написано, если написано то на английском или ещё каком-нибудь другом языке. Хочу узнать как ввести данные и как это работает (не сам алгорим, а использование vector (мне кажется это массив)).
"c++ Стандартная библиотека", автор Nicolai M. Josuttis

У меня есть в эл. виде на русском языке. Если нужно, могу выслать.
Очень доступным языком расписывается стл, со всеми её векторами, и прочими контейнерами.

/ps У вас ужассный стиль кода. Читать его - напрягает. Всё в кучу. Каша какая то.
Если в голове - такая же каша, то не удивительно, что вы запутались. Вынесите определения функций за пределы майна. Оставьте в майне только логику.
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
14.08.2011, 10:57     Как работать с <vector> #3
Леен Аммерааль - STL для программистов на С++
Уильям Дж. Коллинз - Структуры данных и стандартная библиотека шаблонов
Николай Джосьютис. C++. Стандартная библиотека
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
14.08.2011, 11:21     Как работать с <vector> #4
А Effective STL Майерса чем плоха?
Bers
Заблокирован
14.08.2011, 11:26     Как работать с <vector> #5
Цитата Сообщение от diagon Посмотреть сообщение
А Effective STL Майерса чем плоха?
Книга рассчитана на людей, которые уже имеют представление о векторах, алгоритмах, и тп.
Майерс пишет о том, как эффективнее юзать стл, а не о том, что такое это стл, и с чем его едят.
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
14.08.2011, 12:29     Как работать с <vector> #6
Добавлю свежую книжку: http://www.ozon.ru/context/detail/id/5384178/
Прекрасный справочник. Постоянно у меня в работе.
В первой части - куча примеров.
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,621
Записей в блоге: 17
15.08.2011, 07:31     Как работать с <vector> #7
http://www.stu**********/dir/cat32/su.../file8069.html Николай Джосьютис
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2011, 08:30     Как работать с <vector>
Еще ссылки по теме:

Как изменять размер std::vector<std::vector>? C++
Сортировка vector<vector<int>> C++
C++ Как правильно работать с vector?

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

Или воспользуйтесь поиском по форуму:
LosAngeles
Заблокирован
15.08.2011, 08:30     Как работать с <vector> #8
Цитата Сообщение от Avazart Посмотреть сообщение
она бесплатная?
Yandex
Объявления
15.08.2011, 08:30     Как работать с <vector>
Ответ Создать тему
Опции темы

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