그냥 몇 가지 참고 사항 :
정렬 유형
quasiverse의 대답은 당신에게 왼쪽 정당성을 제공, 즉 모든 번호가 첫 번째 문자 위치에서 시작합니다. left
을 삭제하면 오른쪽 맞춤이됩니다. 즉, 모든 숫자가 마지막 문자 위치에서 시작됩니다.
소수점 정렬은 조금 더 어렵습니다. 소수점 이하의 고정 자릿수를 설정하려면 left
을 fixed
으로 바꾸고 setprecision()
을 추가하여 소수점 이하 자릿수를 지정하십시오. 예를 들어, 소수점 과거 두 자리 숫자를 표시합니다 :
cout << setw(8) << fixed << setprecision(2) << myvec[i][0];
2-D를 벡터
당신은
vector< vector<double> > myvec;
를 선언하고
하지만 (두 번째) 차원 3. 하드 코딩 나타납니다 미성년자를이 만들고있는 것을 의미한다 벡터의 벡터이며, 각 행은 3 개의 복식에 대한 저장소가있는 전체 벡터 객체입니다.
vector
s는 데이터를 내부적으로 저장하지 않습니다. 실제 벡터 객체는 요소 수, 실제 데이터 저장소에 대한 포인터 및 아마도 몇 가지 다른 점을 저장합니다. 실제 데이터는 별도의 블록에 저장됩니다. 이것은 많은 오버 헤드와 메모리 단편화를 만듭니다 (모든 행은 데이터를 저장하기위한 블록을 할당합니다).
예를 들어, 1000x3 벡터의 경우 스택에 최상위 벡터 객체가 있고, 힙에 1000 개의 벡터 객체 (행당 하나)의 배열이 있고 그 각각은 3 개의 2 중 블록 블록을 가리 킵니다 따라서 힙에 1001 개의 개체가 있으며 모든 액세스에는 두 개의 포인터가 있어야합니다. 느리고 비효율적입니다.
vector
은 길이가 고정 된 경우 과도합니다.그래서 나는 3 루타를 가진 각 구조, 구조의 벡터를 가진 권하고 싶습니다 :
struct point {
double x, y, z;
};
vector<point> myvec;
이 하나 개의 블록에 모든 데이터를 저장, point
완전히 독립적 때문이다. 그것을 할 수있는 C++ 반복자 방법,
for(unsigned int i = 0; i < myvec.size() ; ++i)
{
cout << setw(8) << left << myvec[i].x << ' ' << setw(8) << left << myvec[i].y
<< ' ' << setw(8) << left << myvec[i].z << endl;
}
또는 : :이 operator[]
호출의 무리를 저장
for(vector<point>::const_iterator elem = myvec.begin(); elem != myvec.end() ; ++elem)
{
cout << setw(8) << left << elem.x << ' ' << setw(8) << left << elem.y
<< ' ' << setw(8) << left << elem.z << endl;
}
그런 다음 코드입니다. auto
컴파일러를 알려줍니다
for(auto elem = myvec.begin(); elem != myvec.end() ; ++elem)
무엇 myvec.begin()
수익률로 elem
유형과 동일하게 연결 : 컴파일러는 새로운 C++ 11 표준을 지원하는 경우 for()
라인을 변경할 수 있습니다. 또 다른 C++ 11의 방법은, 지원 될 가능성이 적습니다의 range-based for loop입니다 : 열 사이
for(auto elem: myvec)
탭을 사용하는 대신 공간 (\의 t) "". –
우리는 이것에 대한 실제 스크린 샷이 정말로 필요합니까 ?? –