Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
#1

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

03.11.2013, 04:19. Просмотров 1111. Ответов 10
Метки нет (Все метки)

Привет. Сабж.

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

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

Аналог функции SetLength - C++
Здравствуйте. Подскажите, пожалуйста, каков аналог на си++ функции setlength? функция malloc?

copy в Delphi, аналог на C++? - C++
Здравствуйте! Пишу курсовую на C++, некоторые функци для программы нашел в коде Delphi. Но вот не могу перенести две строки. while...

Аналог функции, которая используется в Delphi strtoint/inttostr - C++
есть ли в С++ аналог функции , которая используеться в Delphi strtoint/inttostr.И как она используеться???

Setlength - C++
Здравствуйте, Друзья! Помогите решить данную проблему, когда допустим прописываю следующие строчки кода setlength(Pnum,kP); ...

запутался с length - C++
вот если сделать так #include <iostream> #include <string> using namespace std; int main () { string str= "C++ is...

функция Length - C++
Здравствуйте! Объясните пожулуйста - почему функция Length() не работает?:( l = length(s); в с++ может она на с++ по-другому...

10
MrGluck
Модератор
Эксперт CЭксперт С++
7491 / 4606 / 692
Регистрация: 29.11.2010
Сообщений: 12,596
03.11.2013, 04:32 #2
Цитата Сообщение от VladSharikov Посмотреть сообщение
Как поступить скажите Пожалуйста!)
использовать вектор
http://www.cplusplus.com/reference/vector/vector/
1
VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
03.11.2013, 05:32  [ТС] #3
Иниц:
C++
1
vector<myType> myVar;
Выделение памяти:
C++
1
myVar.resize(myVar.maxsize+1);
Добавление нового элемента:
C++
1
myVar.push_back(...);
Работа с хранимым элементом:
C++
1
myVar[i] ...
Что я не так понял? Или правильно?
0
MrGluck
Модератор
Эксперт CЭксперт С++
7491 / 4606 / 692
Регистрация: 29.11.2010
Сообщений: 12,596
03.11.2013, 05:35 #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();
1
VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
03.11.2013, 05:40  [ТС] #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;
так?
0
MrGluck
Модератор
Эксперт CЭксперт С++
7491 / 4606 / 692
Регистрация: 29.11.2010
Сообщений: 12,596
03.11.2013, 05:47 #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);
но суть вы уловили
1
VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
03.11.2013, 06:19  [ТС] #7
MrGluck,
погодите.
то есть элемент удаляется? аля очередь?

а как получать доступ так, чтобы не удалялся? мне нужно их сортировать, например, будет. Как обратится просто к элементу массива?
0
MrGluck
Модератор
Эксперт CЭксперт С++
7491 / 4606 / 692
Регистрация: 29.11.2010
Сообщений: 12,596
03.11.2013, 07:00 #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;
}
0
VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
03.11.2013, 17:38  [ТС] #9
Сделал , спасибо.
Все работает
0
Avazart
Эксперт С++
7247 / 5419 / 297
Регистрация: 10.12.2010
Сообщений: 24,048
Записей в блоге: 17
03.11.2013, 18:45 #10
VladSharikov, Чет у меня подозрения что пишешь в С++Builder, а значит можно использовать классы VCL из Delphi к примеру
TDynArray, но контейнеры STL удобнее ...
0
VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
03.11.2013, 18:50  [ТС] #11
Avazart, нет, пишу в DevCPP.

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

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

для него нужно иметь список/массив точек
0
03.11.2013, 18:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2013, 18:50
Привет! Вот еще темы с ответами:

функция length - C++
#include &lt;vcl.h&gt; #pragma hdrstop #include &lt;stdio.h&gt; #include &lt;string.h&gt; ...

Что возвращает length? - C++
Что возвращает s.length(), если std::string s; хранит UTF8? Длину в байтах, или в символах?

Что делает функция length? - C++
void main() { using namespace std; string st,stt; cout &lt;&lt; &quot;enter name files:&quot; &lt;&lt;endl; char name; cin &gt;&gt; name; ifstream...

Элемент-функция length() возвращает количество символов - C++
Здравствуйте. void GradeBook::setCourseName(string name) { if (name.length() &lt;= 25) // если не более 25 символов ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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