2014-12-10 5 views
1

나는 n 개의 원소를 포함하는 목록을 가지고있다. 이 요소들은 행렬 A를 생성합니다 : A (예) :어떻게 목록을 여러 벡터로 나눌 수 있습니까?

그리고 행으로부터 모든 원소를 포함하는 벡터를 만들고 싶습니다. 그래서 첫 번째 벡터는 첫 번째 행의 모든 ​​숫자를 포함하고 두 번째 벡터는 두 번째 행의 숫자를 포함합니다. 그게 지금까지 내 코드 :

void Insert(){ 
     ifstream OpenFile("A.txt"); 
     if(OpenFile.good()){ 
      istream_iterator <double> start(OpenFile), end; 
      list <double> Matrix2(start, end); 
      double NumberofElements = Matrix2.size(); 
      double Root = sqrt(NumberofElements); 
      const int n = Root; 
       for(list<double>::iterator it = Matrix2.begin(); it != Matrix2.end(); it++){ 
       for(int i=0;i<n;i++){ 
        vector <double> NewVector; 
        NewVector.push_back(Matrix2) 

       } 
       } 
     } 
} 

어떤 제안이 있으십니까?

+0

숫자를 벡터로 나타내려면, 왜 그 숫자를 첫 번째 목록에? – user2079303

+0

그게 내 임무에 명시된 때문입니다. 나는 벡터를 선호하기를 좋아한다. 왜냐하면 나는 그것들을 훨씬 더 작은 것들로 분리해야만했기 때문이다. 그러나 나의 할당은 모든 요소를 ​​목록으로 읽어 들여 벡터에 넣는 것이다. – MageDWizard

답변

0

이 목표를 달성하는 한 가지 방법은 vector 범위 생성자를 활용하고 각 반복자 쌍의 각 vector을 목록의 각 "행"의 시작과 끝으로 구성하는 것입니다.

std::vector<std::vector<double>> v2; 
auto begin_row = matrix2.cbegin(); 
auto end_row = std::next(begin_row, n); 
for (int i = 0; i != n; ++i, begin_row = end_row, std::advance(end_row, n)) 
    v2.emplace_back(begin_row, end_row); 

편집 :

std::vector<std::vector<double> > v2(n, std::vector<double>(n)); 
std::list<double>::const_iterator itr = matrix2.begin(); 
for (size_t i = 0; i != n; ++i) 
    for (size_t j = 0; j != n; ++j) 
    v2[i][j] = *(itr++); 

Live demo : 또는 여기에는 올바른 크기의 벡터 다음 루프는 모든 인덱스에 걸쳐이 하나에서 작동하는 C++ 03을 생성하는 또 다른 방법입니다 Live demo C++03

+0

제 컴파일러는 begin_row와 end_row가 "타입의 이름을 지정하지 못해"따라서 "그 범위에서 선언되지 않았습니다"라고 주장하기 때문에 저에게는 효과적이지 않습니다. 그 외에도 "vector.emplace_back"은 어떤 이유로 든 내 벡터의 멤버가 아닙니다. – MageDWizard

+0

'auto'와'emplace_back'는 C++ 11입니다. 가능하면 컴파일러를 업데이트하십시오. 나는 C++ 03에서 작동하는 것을 제공하려고 노력할 것입니다 ... –

관련 문제