C++ STL에서 벡터는 배열과 흡사하여 사용 빈도수가 높은 컨테이너중 하나이며 크기가 동적으로 변하는 배열이다.

vector

벡터는, 힙 메모리 공간에 생성되는 동적 할당되는 가변배열이다.

기본의 배열보다 효율적인 메모리관리가 가능하다. 

벡터의경우 선언해주었던 메모리의 크기가 꽉찼다면 메모리를 증설한다.

 

벡터의 메모리 할당방식의경우 실제 사용데이터수와 여유분을 포함한 개수로 되어있다.

하지만 메모리가 꽉찰경우 벡터의 메모리의 크기가 1.5배씩 증가하여 메모리크기가 크면클수록 증가하는 메모리가 더욱커진다.

또한 list 와 달리 원소를 추가하는것이아닌 ,

1.5배 증가된 배열을 생성한후 기존에 있던 배열에 있는 데이터를 복사를 하면서 늘려간다

계속 크기가 증가하면 복사비용이 들게된다. 이러한 복사비용을 줄이기위해서는 처음부터 여유있게 생성하는것이 중요할것같다. 

 

벡터 사용법

 

벡터를 사용하려면 vector 헤더파일을 include 해주면된다.

#include<vector>

 

vector 선언문이다

int main()
{
// vector int형, string형, float형 따로 선언
	
    std::vector<int> vectorInt;
    
    std::vector<std::string> vectorString;
    
    std::vector<float> vectorFloat;
    
    return 0;
}

 

vector 데이터를 넣는 방식이다.

생성한 벡터에 데이터를 넣으러면 push_back(데이터); 를 사용하여 데이터를 저장한다.

vectorint.push_back(10);
vectorint.push_back(20);
vectorint.push_back(30);

vectorString.push_back("10");
vectorString.Push_back("20");
vectorString.Push_back("30");

vectorFloat.push_back(10.0f);
vectorFloat.push_back(20.0f);
vectorFloat.push_back(30.0f);

 

vector에 잘 입력되었는지 출력을 해보자

#include <iostream>
#include <vector>
#include <string>
int main()
{
    std::vector<int> vectorInt;
    vectorInt.push_back(10);
    vectorInt.push_back(20);
    vectorInt.push_back(30);    

    std::vector<std::string> vectorString;
    vectorString.push_back("10");
    vectorString.push_back("20");
    vectorString.push_back("30");    

    std::vector<float> vectorFloat;
    vectorFloat.push_back(10.0f);
    vectorFloat.push_back(20.0f);
    vectorFloat.push_back(30.0f);
    
    for (int index = 0; index < 3; index++)
    {
        std::cout << vectorInt[index] << "\t";
        std::cout << vectorString[index] << "\t";
        std::cout << vectorFloat[index] << std::endl;
    }    
    return 0;
}

'개발 > c++' 카테고리의 다른 글

C++ STL 소개  (0) 2022.08.02

STL이란

STL은 표준 C++ 라이브러리의 일부분으로 Standard Templat Library의 약자입니다.
STL은 프로그램에 필요한 자료구조와 알고리즘을 템플릿으로 제공하는 라이브러리입니다.

코딩테스트에서 STL을 사용하면 손쉽게 자료구조와 알고리즘 문제를 원활히 풀수있습니다.

 

STL의 구성 요소로는

  • 컨테이터 (Container) 객체를 저장하는 객체로 컬렉션 혹은 자료구조라고도 합니다.
  • 반복자 (Iterator) 포인터와 비슷한 개념으로 컨테이너의 원소를 가리키고, 가리키는 원소에 접근하여 다음원소를 가리키게 하는 기능을 합니다.
  • 알고리즘 (Algorithm) 정렬, 삭제, 검색 연상등을 제공하는 함수 템플릿입니다.
  • 함수객체 (Function Object) 함수처럼 동작하는 객체로 컨테이너와 알고리즘 등에 클라이언트 정택을 반여합니다.

 

STL의 컨테이너는 2가지로 나뉩니다.

  • 표준 시퀀스 컨테이너
  • 표준 연관 컨테이너

시퀀스 컨테이너는 모든요소들이 삽입 순서에 따라 상대적위치를 갖는 컨테이너입니다.

시퀀스 컨테이너 세가지가 있습니다

  • vector
  • list
  • deque
    • quere
    • priority queue
    • stack

연관 컨테이너는 삽인 순서와 상관없이 정렬 기준에 따라 원소의 위치가 결정됩니다.

연관 컨테이너는 네가지가 있습니다.

  • set
  • multiset
  • map
  • multimap

'개발 > c++' 카테고리의 다른 글

C++ STL(vector) 사용법  (0) 2022.08.11

크로미움이란 누구나 크롬을 만들수 잇게 만든 오픈 소스 웹 브라우저 프로젝트 입니다.

C#을 이용하여 Chorme 웹 브라우저를 만들어 보겠습니다.

Visual studio 에서 Chrome 웹 브라우저를 만드려면 크로미움이란 오픈소스를 이용해 만들어야합니다.

 

 

먼저 Visual studio를 실행한뒤 Winform을 생성해 줍니다. 

 



솔루션 탐색기 > 참조(마우스 우클릭) > NuGet 패키지 관리를 클릭해 줍니다.

 

 


찾아보기를 클릭후 검색 창에 cef 혹은 cefsharp Winforms 를 검색하여 설치 버튼을 눌러 줍니다. 

 

 


CefSharp 다운로드가 완료가 되면 form 디자인으로가서 보기 > 도구상자 > 컨테이너 > Panel를 클릭하여
form 안에 Panel 을 추가해 준다 .

 


생성된 Panel을 클릭하여 속성창을 열어준후 Dock 설정을 fill로 변경해 줍니다.

 

 


전체적인 코드 입니다

 

코드 맨위 using에 추가해 줍니다. 

using CefSharp;
using CefSharp.WinForms;

 

코드는 간략하므로 자세한 설명은 생략합니다. 궁금하신점이 있으시면 댓글로 물어보시면 답변해드립니다.

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using CefSharp;
using CefSharp.WinForms;

namespace WindowsFormsApp2
{
    public partial class Form1 : Form
    {
        public ChromiumWebBrowser Browser;
        public Form1()
        {
            InitializeComponent();
            InitBrowser();
        }
        public void InitBrowser()
        {
            CefSettings cefSettings = new CefSettings();
            Cef.Initialize(cefSettings);
            Browser = new ChromiumWebBrowser("www.google.com");            
            this.panel1.Controls.Add(Browser);
            Browser.Dock = DockStyle.Fill;
        }
    }
}

 

'개발 > c#' 카테고리의 다른 글

c# 윈폼 로또 생성기  (1) 2021.05.11
C# WebBrowser 자동 로그인  (4) 2021.04.15
Boxing UnBoxing  (0) 2021.04.14
c# WebBrowser 만들기  (0) 2021.04.12
c# 으로 메모장 만들기  (0) 2021.04.11

오늘은 간단히 프로그래밍에 입문하면 처음 만드어 볼수 있는 프로그램 주제로 넘어가

로또 생성기를 만들어 보겠습니다. 콘솔을 이용한 로또 프로그램보다는 ui 요소가 들어가 있는 부분이 더욱

공부가 됩니다.

윈폼 으로 간단한 로또 생성기를 만들어 보겠습니다. 

 

 

 


Lotto UI 디자인

비주얼 스튜디오로를 실행후 c# winform 프로젝트를 생성 하여 줍니다

윈폼을 생성한뒤 도구상자를 들어가 Label을 7개 생성해줍니다.

도구상자는 <보기>를 클릭 하시면 목록에 도구상자가 있습니다.

 

라벨중 하나를 제목으로 지정하여야 합니다 일단 라벨 하나를 선택하여 속성창을 들어갑니다.

그리고 라벨의 속성중

Name을 LottoTitleLabel ,

Text 을 로또 생성기 ,

font size를 18pt 로 변경하여줍니다.

 

 

 

 

나머지 라벨을 한꺼번에 선택하여 font size 14로 맞춘후 label 정렬하여 줍니다.

그런후 각각 속성 Name 에 LottoNumberLabel1,LottoNumberLabel2, ... 등으로 변경하여 준후 Text를 - 특수 문자로 변경 합니다.

 

 

 

 

 

이렇게 완성된후에 로또를 생성 시킬수 있는 Button을 생성합니다.

그후 Button 속성에 들어가 Name을 NumberCreateButton 으로 바꾸어주고

Text 의 값은 로또 번호 생성으로 바꾸어준후 font size를 적절히 바꾸어줍니다.

 

 

 

버튼을 생성후 

버튼을 더블클릭하여 버튼이 클릭하였을 때 나타나는 함수를 만들어 줍니다.

 

 

 

 

 


 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Lotto
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void NumberCreateButton_Click(object sender, EventArgs e)
        {
            Label[] LottoArray = new Label[] { LottoNumberLabel1, LottoNumberLabel2, LottoNumberLabel3,
                LottoNumberLabel4, LottoNumberLabel5, LottoNumberLabel6 };

            Random rand = new Random();

            for (int lottoindex = 0; lottoindex < LottoArray.Length; lottoindex++)
            {
                int lottoCheckIndex = lottoindex;
                int lottonumber = rand.Next(1, 46);
                for (; lottoCheckIndex >= 0; lottoCheckIndex--)
                {
                    if (LottoArray[lottoCheckIndex].Text == lottonumber.ToString())
                    {
                        lottoCheckIndex = lottoindex;
                        lottonumber = rand.Next(1, 46);
                    }
                }
                LottoArray[lottoindex].Text = lottonumber.ToString();

            }
        }
    }
}


코드를 작성하여 줍니다. 

'개발 > c#' 카테고리의 다른 글

C# Chromium 크롬 웹 브라우저 만들기  (0) 2021.09.30
C# WebBrowser 자동 로그인  (4) 2021.04.15
Boxing UnBoxing  (0) 2021.04.14
c# WebBrowser 만들기  (0) 2021.04.12
c# 으로 메모장 만들기  (0) 2021.04.11

DB 로그인 인및 데이터베이스 생성에 대해 알아 보도록 하겠습니다.

DB베이스 터미널 창을 키겠습니다.

콘솔창에  mysql -u root -p 를작성하여줍니다.

비밀번호를 작성하고 db에 접속합니다.

 

CREATE DATABASE STUDY;

데이터베이스를 생성후 데이터 베이스가 생성되었는지 

SHOW DATABASES; 로 확인 하여줍니다.

STUDY가 생성 된걸 확인 할수있습니다.

'개발 > 데이터베이스' 카테고리의 다른 글

DB 설치  (0) 2021.04.25

DB베이스 설치를 알아보도록 하겠습니다.

MYSQL, MARIADB 둘중 아무거나 설치 하셔도 됩니다 .

저는 MARIADB 를 알아 보도록 하겠습니다.

구글 검색 창에 MARIADB를 검색 하시고 사이트를 들어갑니다.

들어간후 바로 상단에 보이는 다운로드 버튼을 클릭하여 들어 가줍니다.

 

밑줄친 부분의 설정을 해주신뒤 다운로드를 눌러줍니다. 

밑줄친 부분은 

1. 버전

2. 운영체제

3. 컴퓨터의 비트수 

4. 다운로드받는 파일의 파일유형입니다.

다운로드 받은후 실행을 클릭하여 줍니다.

버튼을 순차적으로 클릭후

 

DataBase에서 사용할  패스워드를 설정후 다음을 클릭하여 하고 다운로드를 완료해줍니다.

 

설정창은 그대로 놓아누고 NEXT를 누른후 다운로드 설치 완료를 합니다.

 

 

설치완료후 윈도우창 좌측 하단 검색창을 이용하여

db를 찾습니다.

이렇게 설치 된걸 확인하면 설치는 끝났습니다.

'개발 > 데이터베이스' 카테고리의 다른 글

DB 로그인, 데이터베이스 생성 (window)  (0) 2021.04.25

타이탄의 도구들 말그대로 세계적인 거인들이된 자신들 만의 작은 습관 들을 설명해준다.

그중 당연히 기억남는것은 거인들의 아침습관이다. 

1. 아침에 이불을 개면서 시작하는 것이다.

2. 그리고 명상을 시작한다.

3. 가벼운 차를 마신다.

4. 일기를 쓴다.

5. 한동작을 5~ 10회 반복해라.

이다 그리고 각 분야들 거인들의 신념과 습관들을 말하여 준다.

이주요 습관들을 인터넷에 검색해 보았다. 벌써 나아닌 다른사람들도 벌써 실천을 하고있다.

지금 이렇게 블로그를 작성하는것도 부자들의 작은 습관 들을 실천 하고 있는것이다.

먼지가 쌓이고 쌓여서 거대한 산을 이루듯 작은것들을 실천하면서 질량이 거대해지는 

거인들의 작은 습관들이 이책에서 말하고 싶었던 내용같다. 

주관적인 나의 생각이다.

' > 자기개발서(부자편)' 카테고리의 다른 글

부의 추월차선 -엠제이 드마코-  (0) 2021.04.14

프로그래밍을 처음 배울때 hello world 다음으로 배우는 것이 변수입니다

우리는 이변수에 대해서 얼마나 알고있을까요?

종종 책을 펴서 공부를 하다보면 책에는 변수는 값을 담는 상자 그릇 이라고 표현을 많이합니다.

저또한 남들 한테 변수를 설명해줄때 그릇과 상자라고 이야기를 하곤 했습니다.
이건 잘못된 설명이며 프로그램을배울때 변수의 데이터가 어디에 저장되어있는지 정확히 알아야 합니다.

그렇다면 변수란 무엇이며 어떤 변수들이 있는 지 설명 하겠습니다.

 

변수란 데이터를 저장할수 있는 메모리 공간입니다.  여기서 메모리 공간이란 프로그램이 실행 될때

프로세스가 할당 받은 메모리 공간안을 의미 합니다. 프로세스가 메모리 공간을 할당 받을때는 

총 4개의 구역의 메모리 공간을 할당 받습니다. Stack , heap, data , code 영역이 생기게 됩니다.
여기서 변수는 stack 영역의 메모리공간에도 들어가며 data공간에도 들어가면 heap영역에도 들어갑니다





 

 

+ Recent posts