728x90 반응형 C++복습20 C++복습) vector(삽입/삭제) 끝 삽입/삭제 끝 삽입 삭제에서는 push와 pop이 있다. 맨 마지막에 있는 배열에 삽입하는 것이므로 시간복잡도는 O(1)이다. push_back/pop_backvectorv;v.push_back(1);v.pop_back(); 중간 삽입/삭제 중간 삽입/삭제에는 insert와 Erase가 있다. 삽입의 경우 원래 있던 데이터들을 밀어내고 삽입하며 변수로는 삽입점과 데이터를 받고 있으며, 삭제의 경우 삭제한 지점 뒤의 데이터들을 땡겨오며 삭제점 및 범위까지 받을수 있다. 중간 삽입 삭제는 최악의 경우 처음의 노드를 삽입/삭제가 될수 있어서 시간복잡도가 O(n)이다. insert/erase vectorv;v.insert(v.begin()+2,5);v.erase(v.begin()+3);v.erase(v.b.. C++복습 2022. 3. 11. C++복습) vector(반복자) 반복자(Iterator) 반복자는 포인터와 매우 유사하지만 컨테이너에서 쓰이는 개념이다.vectoriterator it; 반복자로 컨테이너 접근 보통 반복자로 컨테이너에 접근할때는 begin과 end를 사용한다. begin은 컨테이너의 첫번째 원소의 주소값을 가르키는 것이며, end는 컨테이너의 마지막 다음을 가르키고 있다. vecter::iterater itBegin=v.begin(); //벡터의 첫번째 원소를 가르킴vecter::iterater itEnd=v.end(); //벡터의 마지막 다음을 가르킴 반복자의 성질 int* ptr;vector::iterator it; ptr= &p[0];it = p.begin();포인터는 말그대로 주소를 담기 위한 바구니이기에 어디에 소속되어 있지 않.. C++복습 2022. 3. 11. C++복습) vector(동작원리) 벡터벡터는 STL(Standard Template Library)에서 사용빈도가 높은 컨테이너중 하나이며, 동적배열로 구성되어 있다. 동적배열 동적배열은 변수의 수가 달라짐에 따라 배열의 크기 또한 유동적으로 변화하는 배열을 의미한다. 그렇다면 어떤식으로 배열의 크기가 유동적으로 변화하는 것인가? 다음과 같은 방법으로 동적배열은 작용한다. 여유분을 두고 메모리를 할당한다. 메모리가 꽉찬다면, 메모리를 증설한다. 이런 두 방식으로 동적배열이 작동한다고는 하지만 다음과 같은 의문이 생긴다.Q1)여유분은 얼마만큼이 적당한가?Q2)증설은 얼마나 해야되나Q3)기존 데이터를 어떻게 처리할까? 벡터의 메모리 할당 원리 벡터의 메모리 할당 방식은 size(실제 사용 데이터 개수)와 capacity(여유분을 포함한 .. C++복습 2022. 3. 9. C++복습) C++20/Module Module은 C++20에서 가장 중요한 함수라고 해도 과언이 아니다. 당장 상용엔진에서의 활용은 다소 어려울지 모르나, 향후 3~4년이내에 서버쪽에서는 높은 활용도를 가지지 않을까 생각한다. Module의 필요성 Moudule은 C++의 고질적인 문제인 컴파일 시간을 단축시켜준다는 장점이 있다.기존 빌드단계는 전처리(#include/#define)->컴파일(오브젝트파일 생성)->링크(오브젝트들의 연관관계를 분석/연결)이다. 기존 빌드단계의 문제점 빌드속도가 매우 느리다.개별적으로 빌드되어 개별의 Obj파일을 만들어진다. 코드중복및 반복된 치환에 의해 또한 일어날수 있기 때문에 빌드속도가 느리다. 매크로 문제 심볼 중복 정의동일한 이름의 심볼/함수가 존재할 경우 링크 단계에서 충돌하는 경우가 있다... C++복습 2022. 2. 4. C++복습) C++20/Concept conceptconcept는 템플릿에 대한 특정 requirements(제약)에 이름을 붙이는 용도로 쓰인다. templatevoid Test(T num){}int main(){ Test(3); Test(3.14f);}//T값에서 정수만 받고 싶다면 어떻게 해야되나?위 코드가 있다고 할때 T에 대해서 조건을 붙이고 싶을때 사용하는 것이 바로 concept이라는 문법이다. 이러한 concept의 필요성은 대부분의 조건들은 런타임때 결정되지만 concept은 컴파일 단계에서 결정되기 때문에 프로그램의 성능을 향상시킬수 있다. concept의 표현식concept의 기본적인 구조는 requires std::조건이며, 총4가지의 표현식이 존재한다. 1.Requires기본적인 concept의 구조이며 templat.. C++복습 2022. 1. 10. C++복습) Modern C++/smart pointer 포인터포인터는 C++에서 장점이자 단점이다. 포인터는 직접적으로 메모리를 읽거나 수정할수 있다는 장점이 존재하지만, 그로 인해 발생하는 여러가지 문제점이 너무나도 위험하다는 단점또한 존재한다. 포인터의 문제점: 댕글링포인터(Dangling Pointer)댕글링 포인터는 포인터의 여러 문제점 중 하나이며, 포인터가 해제된 메모리 영역을 가리키고 있는 상태를 의미한다. 이것의 문제점은 해제된 메모리 영역을 사용했을때 예측이 불가한 동작을 하는데에 있다.class Mage{ Mage() { } ~Mage() { } public: void Attack() { if(_target)_target->_hp-=damagel } public: int _hp=100; int damege=10; Mage* _.. C++복습 2022. 1. 3. C++복습) Modern C++/lambda lambdalambda는 C++11에서 새로운 개념이 추가되어서 나온것이 아닌 함수객체를 빠르게 만드는 문법이다. 주로 1회성 함수객체를 만들때 사용한다. 그렇다면 왜 이러한 람다식이 필요로 하는것인가? 람다의 필요성enum class ItemType{ None, Armor, Weapon, Jewel,}enum class Rarity{ Common, Rare, Unique,};class Item{ public: item(){} item(int id,Rarity rare,ItemType type):_itemid(id),_rare(rare),_type(type) public: int _itemid=0; Rarity _rare=Rarity::Common; ItemType _type=ItemType.. C++복습 2021. 12. 30. C++복습) Modern C++/전달 참조 전달참조전달 참조의 형태는 오른값 참조와 동일하게 &&로 되어 있어 혼동이 될수있다. Template이나 auto와 같은 타입추론/형식연역일 경우 발생하기 때문에 이러한 상황을 보고 구별해야된다.void Test_RvalueRef(Admin&& admin){}templatevoid Test_ForwardingRef(T&& param){}int main(){ Admin admin; Test_RvalueRef(std::move(admin));//오른값 캐스팅 Test_ForwardingRef(admin); Test_ForwardingRef(std::move(admin));}위 코드와 같이 &&가 오른값참조만을 지원한다면 왼값을 넣었을때 에러를 내야되지만 템플릿에 적용하게되면 왼값과 오른값 둘다 통과가 되.. C++복습 2021. 12. 30. C++복습) Modern C++/ 오른값 참조( rvalue)와 std::move 오른값 참조는 일반적인 콘텐츠나 코드에서는 자주 활용할 일은 적으나 Modern C++11에서 가장 핵심적인 변화이며 꽃이라고 알려져 있다.왼값(Lvalue)/오른값(Rvalue)왼값(Lvalue):단일식을 넘어서 계속 지속되는 개체오른값(Rvalue):왼값(Lvalue)가 아닌 나머지 값들(임시 값, 열거형, 람다, i++등등..)int a=3;a=4;3=a; //Error(a++)=5; //Error이런 식으로 우리가 사용해왔던 변수들이나 지속가능한 개체들은 왼값이고, 나머지는 오른값으로 되어서 지속되지않는 것을 알 수 있다.class Admin{public:public: int _pass:101;};void Test_Copy(Admin admin){} //복사연산이며 원본과는 관계없다.void T.. C++복습 2021. 12. 29. C++복습) Modern C++/ override , final override/finaloverride나 final은 다른언어인 Java나 C#과 같은 언어에서는 흔한 문법이지만 C++의 경우 C++11에서 등장하게 된다.이둘은 가상함수와 연관이 있으며 자주 활용이 된다. override의 필요성 class OS{ };class Admin: public OS{ virtual void access() { coutaccess(); OS* os=new User(); os->access();//Error}위와 같은 코드와 달리 엄청나게 긴 코드가 상속관계에 있고, access에 virtual이 붙어 있다면 최초로 가상함수를 사용한것이 누구인지 구별하기 힘들수 있다. 이러한 문제점에 의해 나온것이 override문법이다. override 구현override는 이.. C++복습 2021. 12. 28. C++복습) Modern C++/ Delete 목차 Delete 함수 Delete함수는 C++11에서 처음 나왔다. 어떤 함수를 삭제(delete)시키면 그 함수에 대한 어떤 호출도 불가능하게 된다.함수를 사용하지 않거나 호출하지 않을 것이면 아예 만들지 않으면 된다고 생각할수 있지만, 함수 삭제는 컴파일러가 자동적으로 생성해주는 함수들의 접근을 방지해주는 것에 도움을 준다. ex)생성자, 소멸자, 대입연산자,nullptr private의 한계와 정의되지 않은 함수 c++11 이전에서는 private를 이용하여 함수의 접근을 막아왔다.하지만 private는 삭제가 아닌 클래스 내부에 존재하며 클래스 내부에서 사용이 가능하기 때문에 접근할수있는 예외는 언제나 존재하기 마련이다.class User{private: void operator.. C++복습 2021. 12. 26. C++복습) Modern C++/ enum class 열거형 C++에는 많은 자료형이 존재하는데, 열거형은 가능한 모든 값이 기호 상수로 정의되는 자료형이다.이 열거형은 C++11이 나오기 전까지 enum(Unscoped Enum) 키워드를 통해 정의되었다. C++11에 들어서면서 enumclass(Scoped Enum)가 새로 나오게 되면서 enum과 enumclass를 혼용하면서 쓰는것이 가능해졌다. enum의 문제점 enum test : int{ Player=3, Monster, GM,};enum의 문제점은 enum안의 변수가 코드 전체에 영향을 미친다는 것이다. 즉, 해당 코드에선 더이상 Player이라는 이름은 3이라는 값 이외에는 활용이 불가능 하다.따라서 통상적으로 enum을 사용할 경우 enum의 이름의 약자를 앞에다 붙여주는 ts_Pla.. C++복습 2021. 12. 24. 이전 1 2 다음 728x90 반응형