inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

홍정모의 따라하며 배우는 C++

10.6 컨테이너 클래스 숙제 피드백

241

송지웅

작성한 질문수 2

0

안녕하세요 강의를 듣고있는 학생입니다.

10.6에서 컨테이너 클래스의 개념을 설명해주시고

IntArray를 직접 구현해보는 숙제를 내주셔서 직접 머리를 짜내서 코드를 구현해봤습니다.

이 글을 보신 숙련자 분들께 제가 구현한 intArray를 피드백 받고싶어서 글을 작성합니다.

  1. #include <iostream>

  2. #include <vector>

  3. using namespace std;

  4. class IntArray

  5. {

  6. private:

  7. int m_length = 0;

  8. int* m_data = nullptr;

  9. public:

  10. IntArray(const int length)

  11. :m_length(length)

  12. {

  13. m_data = new int[m_length];

  14. }

  15. IntArray(const std::initializer_list<int>& list)

  16. :IntArray(list.size())

  17. {

  18. int count = 0;

  19. for (auto& ele : list)

  20. {

  21. //cout << "list" << endl;

  22. m_data[count] = ele;

  23. count++;

  24. }

  25. }

  26. ~IntArray()

  27. {

  28. delete[] m_data;

  29. }

  30. void initialize(const std::initializer_list<int>& list)

  31. {

  32. delete[] m_data;

  33. m_length = list.size();

  34. m_data = new int[m_length];

  35. if (m_data != nullptr)

  36. {

  37. int count = 0;

  38. for (auto& ele : list)

  39. {

  40. m_data[count] = ele;

  41. count++;

  42. }

  43. }

  44. }

  45. void reset()

  46. {

  47. delete[] m_data;

  48. m_data = nullptr;

  49. }

  50. void resize(const int size)

  51. {

  52. m_length = size;

  53. }

  54. void insertBefore(const int & value, const int & ix)

  55. {

  56. m_length += 1;

  57. int *n_data = new int[m_length];

  58. int i = ix;

  59. for (int n = 0; n < ix; n++)

  60. n_data[n] = m_data[n];

  61. n_data[ix] = value;

  62. for (i; i < m_length; i++)

  63. {

  64. n_data[i + 1] = m_data[i];

  65. }

  66. delete[] m_data;

  67. m_data = n_data;

  68. }

  69. void remove(const int& ix)

  70. {

  71. m_length -= 1;

  72. int* n_data = new int[m_length];

  73. int count = ix;

  74. for (int i = 0; i < ix; i++)

  75. {

  76. n_data[i] = m_data[i];

  77. }

  78. for (count; count < m_length; count ++)

  79. {

  80. n_data[count] = m_data[count+1];

  81. }

  82. delete[] m_data;

  83. m_data = n_data;

  84. }

  85. void push_back(const int& value)

  86. {

  87. this->m_length += 1;

  88. int* n_data = new int[m_length];

  89. for (int i = 0; i < m_length; i++)

  90. n_data[i] = m_data[i];

  91. n_data[m_length-1] = value;

  92. delete[] m_data;

  93. m_data = n_data;

  94. }

  95. friend ostream& operator << (ostream& out, IntArray& ia)

  96. {

  97. for (int i = 0; i < ia.m_length; i++)

  98. out << ia.m_data[i] << " ";

  99. out << endl;

  100. return out;

  101. }

  102. };

  103. int main()

  104. {

  105. IntArray my_arr{ 1, 3, 5, 7, 9 };

  106. cout << my_arr << endl;

  107. my_arr.insertBefore(10, 1);

  108. cout << my_arr << endl;

  109. my_arr.remove(2);

  110. cout << my_arr << endl;

  111. my_arr.push_back(13);

  112. cout << my_arr << endl;

  113. my_arr.initialize({ 1, 2, 3 });

  114. cout << my_arr << endl;

  115. return 0;

}

피드백 받고싶은 이유는 함수를 구현할 때 Array에 int를 추가, 삭제, 수정을 할때

새로 동적할당을 받은 뒤에 그 공간에 기존 데이터를 복사해주며 추가,삭제,수정 해줄 부분을 해주고

기존 동적할당 공간은 지우고 기존 객체가 가르키는 포인터를 새로 할당한 공간으로 설정 해주었습니다.

선생님 께서 예시로 작성하는 코드 짜임새와 코드라인수에 비해

제 머리속에서 나온 그대로를 코드로 담은거라 너무 조잡 난해하다는 생각이 들었습니다.

그래서 코드를 더 간단하게 짜려면 이 내용을 어떤식으로 수정하면 좋을지 피드백 받고싶습니다.

혹은 코드에 아쉬운점들을 고수분들의 관점으로 보고 말씀해주시면 배워보고싶습니다 감사합니다.

c++ C++

답변 1

0

강민철

잘 작성하신 듯 합니다 :) 멋집니다.

변수가 메모리에 저장되는 것을 알려주는 강의가 어떤강의였죠

1

470

1

메모리 주소 10진수로 출력

1

655

1

클래스 템플릿 특수화에서 boolalpha로 표현된 리턴값에 대해 질문이 있습니다.

1

501

1

여러가지 리턴 타입에 관한 강의가 어떤 걸까요?

1

534

1

메모리 주소에 관한 질분

0

679

1

인터페이스 클래스에서 reportError의 매개변수에 대해 궁금한 것이 있습니다.

0

553

1

형변환 오버로딩에서 const 관련 질문이 있습니다.

0

445

1

Digit 뒤에 reference를 사용하는 이유

0

510

1

4.2 전역 변수, 정적 변수, 내부 연결, 외부 연결

0

324

1

dat파일이...

0

540

1

TODO:대입 연산자 오버로딩에 대한 소스코드입니다.

0

646

1

복사 생성자 관련 질문이 있습니다.

0

454

1

수업 중 궁금한점이 있습니다.

1

390

1

라이브러리자체가 이해가 되지 않습니다.

0

562

1

마지막 예제 질문

0

304

1

증감연산자 위치에 따른 수행 순서 질문입니다.

0

378

1

단항 연산자 오버로딩에서 return 부분에 질문이 있습니다.

1

413

1

friend함수 관련 질문이 있습니다.

0

312

1

operator+ 정의부분에서 궁금한 것이 있습니다.

0

447

1

3분 17초 질문

0

352

1

함수에 값을 대입한다는 개념이 이해가 되지 않습니다.

0

448

1

int getvalue() const에서 const는 왜 뒤에 붙는건가요?

0

449

2

const Something &st에서 const를 빼면 안되나요?

0

301

1

friend함수는 다른 클래스의 멤버함수로 쓸 수 없나요??

1

494

1