> 백엔드 개발 > C++ > 본문

다양한 개수의 텍스트 파일에서 정수를 C의 벡터로 효율적으로 구문 분석하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-10-30 19:54:30
원래의
494명이 탐색했습니다.

How to Efficiently Parse Integers from a Text File with Varying Counts into a Vector in C  ?

C ifstream을 사용하여 텍스트 파일에서 정수 읽기

텍스트 파일에서 그래프 인접 정보를 읽으려고 하면 다음으로 끝나는 다양한 정수 개수의 줄이 나타날 수 있습니다. 'N'. getline() 메서드를 사용하여 각 줄을 개별적으로 검색하면 정수 수가 일치하지 않기 때문에 각 줄을 정확하게 구문 분석하는 것이 어렵습니다. 이 문제를 해결하고 이러한 값을 벡터에 효율적으로 저장하기 위한 전략이 모색됩니다.

기존 접근 방식에서는 getline()이 읽은 각 줄을 반복하고 istringstream 개체를 활용하여 각 줄을 구문 분석해야 합니다. 정수를 순차적으로 읽으면 벡터에 추가할 수 있으며 원하는 대로 추가로 조작할 수 있습니다. 다음 코드는 이러한 접근 방식을 예시합니다.

<code class="cpp">#include <fstream>
#include <sstream>
#include <string>
#include <vector>

int main() {
  std::ifstream infile("thefile.txt");
  std::string line;

  while (std::getline(infile, line)) {
    std::istringstream iss(line);
    int n;
    std::vector<int> v;

    while (iss >> n) {
      v.push_back(n);
    }

    // Do something with v
  }
}</code>
로그인 후 복사

대체 솔루션에는 단일 줄 for 루프가 포함됩니다. istream_iterator 클래스를 활용하면 값을 벡터로 직접 읽을 수 있어 중간 컨테이너의 필요성이 줄어듭니다. std::move에서 발생할 수 있는 잠재적인 매달린 참조를 방지하기 위해 보조 기능도 사용됩니다.

<code class="cpp">#include <fstream>
#include <string>
#include <vector>

int main() {
  std::vector<std::vector<int>> vv;

  for (std::string line;
       std::getline(std::cin, line);
       vv.push_back(std::vector<int>(std::istream_iterator<int>(std::stay(std::istringstream(line))),
                                     std::istream_iterator<int>())
                    )
       ) { }
}</code>
로그인 후 복사

위 내용은 다양한 개수의 텍스트 파일에서 정수를 C의 벡터로 효율적으로 구문 분석하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿