기술나눔

C 시리즈-벡터 (1)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

🌈个人主页:동급생 Yuchen 

💫个人格言:“成为自己未来的主人~”   

벡터 소개 및 활용

벡터 소개

벡터로 구성한 매개변수 유형이 char 유형인 경우 문자열과 매우 유사하지만 차이점도 있습니다. 예를 들어 벡터의 경우다른 유형을 고려할 수 있지만 string은 문자열에만 사용할 수 있습니다., 그리고 문자열을 자세히 배우고 나면 다른 STL 내용을 배우는 것이 더 쉬워질 것입니다.

  1. Vector는 가변 크기 배열을 나타내는 시퀀스 컨테이너입니다.
  2. 배열과 마찬가지로 Vector도 연속적인 저장 공간을 사용하여 요소를 저장합니다. 즉, 첨자를 사용하여 Vector의 요소에 액세스할 수 있습니다. 이는 배열만큼 효율적이지만 배열과 달리 크기가 동적으로 변경될 수 있습니다. 크기는 컨테이너에 의해 자동으로 처리됩니다.
  3. 기본적으로 Vector는 동적으로 할당된 배열을 사용하여 요소를 저장합니다. 새 요소가 삽입되면 저장 공간을 늘리기 위해 숫자를 다시 할당해야 합니다. 이 접근 방식은 새 배열을 할당한 다음 모든 요소를 ​​이 배열로 이동하는 것입니다. 이는 시간 측면에서 상대적으로 비용이 많이 드는 작업입니다. 왜냐하면 새 요소가 컨테이너에 추가될 때마다 Vector의 크기가 재할당되지 않기 때문입니다. 매번.
  4. 벡터 할당 공간 전략: 벡터는 저장 공간이 필요한 실제 저장 공간보다 크기 때문에 가능한 증가를 수용하기 위해 일부 추가 공간을 할당합니다. 라이브러리마다 공간 사용량과 재할당을 평가하기 위해 서로 다른 전략을 사용하지만 어떤 경우에도 재할당 할당은 항상 동일해야 합니다. 로그적으로 증가하는 간격 크기이므로 끝에 요소를 삽입하는 것은 일정한 시간에 수행됩니다.
  5. 따라서 벡터는 공간을 관리하고 효율적인 방식으로 동적으로 확장할 수 있는 능력을 얻기 위해 더 큰 저장 공간을 차지합니다.
  6. 다른 동적 시퀀스 컨테이너에 비해 Vector는 요소에 액세스할 때 더 효율적입니다. 마지막에 요소를 추가하고 삭제하는 것은 상대적으로 효율적이지만, 끝에 있지 않은 다른 삭제 및 삽입 작업에는 효율성이 떨어집니다.

벡터의 활용

push_back 기능

  1. void test_vector1()
  2. {
  3. vector<double> v2;
  4. vector<int> v1;
  5. v1.push_back(1);
  6. v1.push_back(2);
  7. v1.push_back(3);
  8. v1.push_back(4);
  9. for (size_t i = 0; i < v1.size(); i++)
  10. {
  11. cout << v1[i] << " ";
  12. }
  13. cout << endl;
  14. }
  15. int main()
  16. {
  17. test_vector1();
  18. return 0;
  19. }

실제로 push_back에 대해서는 말할 것도 없습니다. Vector의 원래 저장 공간 뒤에 문자를 추가합니다.

실제로 파일에 자세한 소개가 나와 있습니다. 삽입 시 공간이 부족할 경우 자동으로 용량이 확장됩니다.

벡터 함수의 순회 방법에 관해서는 여기에서 다양한 방법에 대해서도 설명하겠습니다.

  1. for (size_t i = 0; i < v1.size(); i++)
  2. {
  3. cout << v1[i] << " ";
  4. }
  5. cout << endl;
  6. for (size_t i = 0; i < v1.size(); i++)
  7. {
  8. cout << v1[i] << " ";
  9. }
  10. cout << endl;
  11. vector<int>::iterator it1 = v1.begin();
  12. while (it1 != v1.end())
  13. {
  14. cout << *it1 << " ";
  15. it1++;
  16. }
  17. cout << endl;
  18. for (auto e : v1)
  19. {
  20. cout << e << " ";
  21. }
  22. cout << endl;

아래 첨자 [] 액세스, 반복자 및 범위를 포함하면 기본적으로 이전에 이야기한 문자열과 동일합니다.

  1. void test_vector2()
  2. {
  3. vector<string> v2;
  4. string s1("张三");
  5. v2.push_back(s1);
  6. v2.push_back(string("李四"));
  7. v2.push_back("王五");
  8. v2[1] += "来";
  9. for (const auto& e : v2)
  10. {
  11. cout << e << " ";
  12. }
  13. cout << endl;
  14. }
  15. int main()
  16. {
  17. test_vector2();
  18. return 0;
  19. }

 

Vector의 더욱 놀라운 점은 Vector를 재사용하고 List, 문자열 또는 다른 Vector와 같은 다른 항목을 Vector에 적용할 수 있다는 것입니다.

문자열이 적용되면 시퀀스 테이블의 각 요소는 문자열을 나타냅니다.