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

Аналог SetLength(x, Length(x)+1) из Delphi в C++ - C++

Восстановить пароль Регистрация
 
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
03.11.2013, 04:19     Аналог SetLength(x, Length(x)+1) из Delphi в C++ #1
Привет. Сабж.

В Delphi можно таким образом работать с массивом:
Объявление:
Delphi
1
x: array of Integer;
Работа с массивом:
Delphi
1
2
SetLength(x, Length(x)+1);
x[High(x)] := ...;
Примерно таким образом. Можно ли аналогично работать с массивом в С++ и как?

Нужно решить такую задачу: алгоритм будет искать пары точек (структура point, к примеру) и добавлять их в динамический массив. Пар может быть 100, может быть 1000, может быть 100000 - неизвестно на начальном этапе. Как поступить скажите Пожалуйста!)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2013, 04:19     Аналог SetLength(x, Length(x)+1) из Delphi в C++
Посмотрите здесь:

Аналог функции, которая используется в Delphi strtoint/inttostr C++
C++ copy в Delphi, аналог на C++?
C++ пояснение по length
запутался с length C++
функция Length C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4923 / 2666 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
03.11.2013, 04:32     Аналог SetLength(x, Length(x)+1) из Delphi в C++ #2
Цитата Сообщение от VladSharikov Посмотреть сообщение
Как поступить скажите Пожалуйста!)
использовать вектор
http://www.cplusplus.com/reference/vector/vector/
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
03.11.2013, 05:32  [ТС]     Аналог SetLength(x, Length(x)+1) из Delphi в C++ #3
Иниц:
C++
1
vector<myType> myVar;
Выделение памяти:
C++
1
myVar.resize(myVar.maxsize+1);
Добавление нового элемента:
C++
1
myVar.push_back(...);
Работа с хранимым элементом:
C++
1
myVar[i] ...
Что я не так понял? Или правильно?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4923 / 2666 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
03.11.2013, 05:35     Аналог SetLength(x, Length(x)+1) из Delphi в C++ #4
Инициализация и выделение памяти:
C++
1
2
const int N = 50;
vector<myType> v(N);
Но лучше просто добавлять элементы в вектор
C++
1
2
vector<myType> v;
v.push_back(myType(value));
он сам все добавит
или удалит с помощью
C++
1
v.pop();
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
03.11.2013, 05:40  [ТС]     Аналог SetLength(x, Length(x)+1) из Delphi в C++ #5
MrGluck, стоп
добавить понял как.
а пользоваться элементом хранимым как?
C++
1
myVar.pop();
?

В цикле будет таким образом:
C++
1
2
3
for (int i = 0; i < myVar.size(); ++i) {
 tmp := myVar.pop();
}
Правильно?

Добавлено через 3 минуты
Еще вопрос, чуть не по теме:
Если у меня вектор структур будет, то как обращаться к элементу?

C++
1
2
3
4
5
6
7
8
struct TPoint {
 double x, y;
};
TPoint tmpPoint;
vector<TPoint> Points;
tmpPoint.x = 1;
tmpPoint.y = 2;
Points.push_back(tmpPoint);
теперь как вывод?
C++
1
2
tmpPoint = Points.pop();
cout << tmpPoint.x << " " << tmpPoint.y;
так?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4923 / 2666 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
03.11.2013, 05:47     Аналог SetLength(x, Length(x)+1) из Delphi в C++ #6
Цитата Сообщение от VladSharikov Посмотреть сообщение
а пользоваться элементом хранимым как?
лучше через итераторы, но можно и работать как с обычным массивом, т.е. через оператор[]
Метод pop_back (с pop я опечатался) удаляет последний элемент из вектора.
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
#include <iostream>
#include <vector>
 
int main()
{
    std::vector<int> v; // объявляем вектор
    // добавляем элементы
    v.push_back(3);
    v.push_back(1);
    v.push_back(2);
    v.push_back(4);
    // выводим вектор на экран используя итераторы (типо умных указателей)
    // вектор как и большинство (мб даже все) контейнеров STL имеет два
    // итератора begin - указывает на первый элемент и end - указывает на место
    // за последним элементом. Обращаться к этим итераторам можно через соотв.
    // методы (begin() и end() )
    for (std::vector<int>::iterator it = v.begin(); it != v.end(); ++it)
        std::cout << *it << " ";
    std::cout << std::endl;
    // удаляем последний элемент
    v.pop_back();
    // выводим вектор на экран, используя оператор[]
    for (unsigned int i=0; i < v.size(); i++)
        std::cout << v[i] << " ";
}
Я же вам подробный мануал кинул:
http://www.cplusplus.com/reference/vector/vector/
Там по каждому методу пример есть

Добавлено через 1 минуту
Цитата Сообщение от VladSharikov Посмотреть сообщение
Points.push_back(tmpPoint);
можно
C++
1
Points.push_back(tmpPoint(1, 2));
для С++11
C++
1
Points.emplace_back(1, 2);
но суть вы уловили
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
03.11.2013, 06:19  [ТС]     Аналог SetLength(x, Length(x)+1) из Delphi в C++ #7
MrGluck,
погодите.
то есть элемент удаляется? аля очередь?

а как получать доступ так, чтобы не удалялся? мне нужно их сортировать, например, будет. Как обратится просто к элементу массива?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4923 / 2666 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
03.11.2013, 07:00     Аналог SetLength(x, Length(x)+1) из Delphi в C++ #8
Цитата Сообщение от VladSharikov Посмотреть сообщение
Как обратится просто к элементу массива?
я же выше пример привел, даже два.
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <vector>
 
int main()
{
    std::vector<int> v = {1, 2, 3, 4, 5};
    std::cout << v[2] << " ";
    std::vector<int>::iterator it = v.begin() + 3;
    std::cout << *it << std::endl;
}
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
03.11.2013, 17:38  [ТС]     Аналог SetLength(x, Length(x)+1) из Delphi в C++ #9
Сделал , спасибо.
Все работает
Avazart
 Аватар для Avazart
6901 / 5141 / 252
Регистрация: 10.12.2010
Сообщений: 22,604
Записей в блоге: 17
03.11.2013, 18:45     Аналог SetLength(x, Length(x)+1) из Delphi в C++ #10
VladSharikov, Чет у меня подозрения что пишешь в С++Builder, а значит можно использовать классы VCL из Delphi к примеру
TDynArray, но контейнеры STL удобнее ...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2013, 18:50     Аналог SetLength(x, Length(x)+1) из Delphi в C++
Еще ссылки по теме:

C++ Setlength
C++ функция length
Аналог функции SetLength C++

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

Или воспользуйтесь поиском по форуму:
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
03.11.2013, 18:50  [ТС]     Аналог SetLength(x, Length(x)+1) из Delphi в C++ #11
Avazart, нет, пишу в DevCPP.

делаю алгоритм закрашивания многоугольника произвольного.

http://habrahabr.ru/post/116398/
алгоритм со списком реберных точек, смотрите тут

для него нужно иметь список/массив точек
Yandex
Объявления
03.11.2013, 18:50     Аналог SetLength(x, Length(x)+1) из Delphi в C++
Ответ Создать тему
Опции темы

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