Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 16.01.2013
Сообщений: 16

Как удалить все выбранные элементы из первого вектора?

31.05.2015, 17:17. Показов 1011. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.

Есть 2 вектора, в которых хранятся элементы типа TImage. В первом векторе хранятся все созданные элементы. Второй вектор должен хранить все выделенные элементы при нажатии ЛКМ.

Вопрос: Как удалить все выбранные элементы из первого вектора.

.h файл созданного класса
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#ifndef CircleH
#define CircleH
#include <vcl.h>
#include <math.h>
//---------------------------------------------------------------------------
class Circle : public TImage
{
   public:
 
int X1, Y1, X2, Y2, R;
void Move(TObject *Sender, int X, int Y, int X1, int Y1, TShiftState Shift);
void Draw(TImage* img, int X1, int Y1, int X2, int Y2, TColor Color, int Size);
 
/*void CircleRadius();
void ResizeUP(int R){R++;}
void ResizeDOWN(int R){R--;}*/
 
};
//---------------------------------------------------------------------------
#endif

.cpp файл класса
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
#include "Circle.h"
#pragma hdrstop
//---------------------------------------------------------------------------
void Circle::Move(TObject *Sender, int X, int Y, int X1, int Y1, TShiftState Shift)
{
        TImage *moveImage = ((TImage*)Sender);
        if (Shift.Contains(ssLeft))
        {
          moveImage->Left += X - X1;
          moveImage->Top += Y - Y1;
        }
}
//---------------------------------------------------------------------------
void Circle::Draw(TImage* img, int X1, int Y1, int X2, int Y2, TColor Color, int Size)
{
  if (X2 - X1 > 0)
        img->Left = X1;
      else
        img->Left = X2;
 
  if (Y2 - Y1 > 0)
         img->Top = Y1;
       else
         img->Top = Y2;
 
   img->Width  = abs(X2 - X1);
   img->Height = abs(Y2 - Y1);
   img->Transparent = true;
   img->Canvas->Pen->Color = Color;
   img->Canvas->Pen->Width =  Size;
   img->Canvas->Ellipse(0, 0, abs(X2 - X1), abs(Y2 - Y1));
}
.h файл формы
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
#ifndef MainFormH
#define MainFormH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <Graphics.hpp>
#include <ComCtrls.hpp>
#include <ToolWin.hpp>
#include <ImgList.hpp>
#include <Menus.hpp>
#include <Dialogs.hpp>
#include "Circle.cpp"
#include <vector.h>
#include <algorithm.h>
 
using namespace std;
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TEdit *Edit1;
        TImageList *ImageList1;
        TToolBar *ToolBar1;
        TToolButton *ToolButton1;
        TToolButton *ToolButton2;
        TColorBox *ColorBox1;
        TComboBox *ComboBox1;
        TSaveDialog *SaveDialog1;
        TMainMenu *MainMenu1;
        TMenuItem *File1;
        TMenuItem *FileEdit1;
        TMenuItem *Help1;
        TMenuItem *SaveAs1;
        TMenuItem *NOHELP1;
        TMemo *Memo1;
        TMemo *Memo2;
        TToolButton *ToolButton3;
        TMenuItem *DeleteALL1;
        TMenuItem *DeleteSelected1;
        void __fastcall ToolButton1Click(TObject *Sender);
        void __fastcall ToolButton2Click(TObject *Sender);
        void __fastcall ToolButton3Click(TObject *Sender);
        void __fastcall DeleteALL1Click(TObject *Sender);
        void __fastcall DeleteSelected1Click(TObject *Sender);
        void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
        void __fastcall Image1Click(TObject *Sender);
        void __fastcall FormMouseDown(TObject *Sender, TMouseButton Button,
          TShiftState Shift, int X, int Y);
        void __fastcall FormMouseMove(TObject *Sender, TShiftState Shift,
          int X, int Y);
        void __fastcall FormMouseUp(TObject *Sender, TMouseButton Button,
          TShiftState Shift, int X, int Y);
private:
public:
         int X1, Y1, X2, Y2, R;
         int MouseFlag, CircleFlag, SelectingFlag;
         int Moving, CirclePainting, Selecting;
         Circle *Circle1;
         void clearForm();
         TImage* img;
         TImage* temp;
         vector <TImage*> AllCircles;
         vector <TImage*> SelectedCircles;
 
 
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

собсна, сам код
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
 
#include "MainForm.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
        TImage* img = NULL;
        MouseFlag = false; CircleFlag = false; SelectingFlag = false;
        Moving = false; CirclePainting = false; Selecting = false;
}
 
//---------------------------------------------------------------------------
 
 
void __fastcall TForm1::ToolButton1Click(TObject *Sender)
{
   if (ToolButton1->Down)
        MouseFlag = true;
      else
        MouseFlag = false;
 
   if ((MouseFlag == true)&&(CircleFlag == false)&&(SelectingFlag == false))
        Moving = true;
      else
        Moving = false;
}
 
//---------------------------------------------------------------------------
 
void __fastcall TForm1::ToolButton2Click(TObject *Sender)
{
   if (ToolButton2->Down)
        CircleFlag = true;
      else
        CircleFlag = false;
 
   if ((MouseFlag == false)&&(CircleFlag == true)&&(SelectingFlag == false))
        CirclePainting = true;
      else
        CirclePainting = false;
}
 
//---------------------------------------------------------------------------
 
void __fastcall TForm1::ToolButton3Click(TObject *Sender)
{
   if (ToolButton3->Down)
        SelectingFlag = true;
      else
        SelectingFlag = false;
 
  if ((MouseFlag == false)&&(CircleFlag == false)&&(SelectingFlag == true))
        Selecting = true;
      else
        Selecting = false;
}
 
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
   X1 = X;
   Y1 = Y;
 
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
   if (Moving == true)
   {
       Circle1->Move(Sender, X, Y, X1, Y1, Shift);
   }
}
 
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
   X2 = X;
   Y2 = Y;
  if (CirclePainting == true)
  {
    img = new TImage(this);
    int Size = ComboBox1->ItemIndex;
    Circle1->Draw(img, X1, Y1, X2, Y2, ColorBox1->Selected, Size);
    AllCircles.push_back(img);
    img->Parent = Form1;
    img->OnMouseDown = FormMouseDown;
    img->OnMouseMove = FormMouseMove;
    img->OnClick = Image1Click;
 
    Memo1->Lines->Add(IntToStr(AllCircles.size()));
  }
}
 
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Image1Click(TObject *Sender)
{
   if (Selecting == true)
   {
    img = dynamic_cast <TImage*> (Sender);
      SelectedCircles.push_back();
        Memo2->Lines->Add(IntToStr(SelectedCircles.size()));
   }
}
 
//---------------------------------------------------------------------------
 
void __fastcall TForm1::DeleteALL1Click(TObject *Sender)
{
  for(int i = 0; i < AllCircles.size(); i++)
      delete AllCircles[i];
        AllCircles.clear();
 
    for(int i = 0; i < SelectedCircles.size(); i++)                    
        delete SelectedCircles[i];
          SelectedCircles.clear();
}
 
//---------------------------------------------------------------------------
 
void __fastcall TForm1::DeleteSelected1Click(TObject *Sender)
{
  for(int i = 0; i < SelectedCircles.size(); i++)
  {
      delete SelectedCircles[i];
        SelectedCircles.clear();
  }
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
  DeleteALL1Click(Sender);
}
 
//---------------------------------------------------------------------------
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.05.2015, 17:17
Ответы с готовыми решениями:

Как удалить из вектора все отрицательные элементы?
Я решил воспользоваться замечательным методом erase(), который, как известно, может функционировать только с итераторами. Поэтому я объявил...

Как удалить выбранные элементы из БД?
Как удалить выбранные элементы из БД...

Не получается удалить элементы из первого вектора, которые есть во втором
Нужно перегрузить оператор - что-бы удаляло из первого вектора елементы которые есть во втором #include &quot;stdafx.h&quot; #include...

2
0 / 0 / 0
Регистрация: 16.01.2013
Сообщений: 16
31.05.2015, 17:32  [ТС]
Пыщ
Вложения
Тип файла: rar NK.rar (456.0 Кб, 1 просмотров)
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
31.05.2015, 19:37
Цитата Сообщение от everthinq Посмотреть сообщение
Вопрос: Как удалить все выбранные элементы из первого вектора.
Вот пример с int*:
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
    int arr[] = {0,1,2,3,4,5,6,7,8,9};
 
    // вектора, хранящие int*
    std::vector<int*> vIntAll, vIntSelected;
 
    // заполняем первый вектор полностью
    for ( int i = 0; i < 10; i++ )
    {
        vIntAll.push_back(&arr[i]);
    }
 
    // заполняем второй вектор неполностью
    for ( int i = 6; i < 9; i++ )
    {
        vIntSelected.push_back(&arr[i]);
    }
 
    // сравниваем и удаляем указатели в первом векторе, которые также есть во втором
    for ( size_t i = 0; i < vIntSelected.size(); i++ )
    {
        for ( size_t j = 0; j < vIntAll.size(); j++ )
        {
            if (vIntAll[j] == vIntSelected[i]) // сравниваются значения указателей, а не числа
                vIntAll.erase(vIntAll.begin()+j);
        }
    }
 
    // вывод результирующего вектора
    for ( size_t i = 0; i < vIntAll.size(); i++ )
    {
        Memo1->Lines->Add(*vIntAll[i]);
    }
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.05.2015, 19:37
Помогаю со студенческими работами здесь

Удалить из вектора все элементы, которые не являются простыми числами
Люди добрые! Помогите решить контрольную в Pascal 1. С клавиатуры вводятся длина (&lt;=100) вектора и его (целые) элементы. Удалить из...

Удалить из вектора все элементы, которые не являются совершенными числами
Помогите пожалуйста с задачей. Буду очень благодарна! С клавиатуры вводятся длина (&lt;=100) вектора и его (целые) элементы. Удалить...

Удалить из вектора все элементы, которые кратны заданному числу
Добрый вечер/ночь/день, помогите пожалуйста исправить ошибки #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;stdlib.h&gt;...

Удалить все элементы массива до первого четного
program Lab1; uses crt; var f:file of integer; g:file of integer; k:byte; n,i,j,count:integer; a:array of...

Удалить из вектора все элементы, у которых сумма всех делителей больше, чем 10
1. С клавиатуры вводятся длина (&lt;=100) вектора и его (целые) элементы. Удалить из вектора все элементы, у которых сумма всех делителей...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru