다음은 세 가지 솔루션입니다. 첫 번째는 예제 코드에 가장 가깝고 두 번째는 범위 내에서 배열 요소를 올바르게 검색 할 수 있도록 개선 된 것이고 세 번째 이유는 vector
으로 더 나은 서비스를 제공하는 이유입니다 .
해결 방법 1 : 당신이 당신의 루프 반복자에 의해 구별 이름이 당신의 배열을 원하는처럼
것 같습니다. Joe가 말했듯이 배열의 배열을 가질 수 있으므로 내부 배열의 이름은 array [0], array [1], ..., array [n - 1]입니다. 이것은 포인터를 두 번 사용하여 얻을 수 있습니다. 각 내부 포인터는 동적으로 double 배열을 할당하는 데 사용됩니다. 동적으로 할당 된 메모리를 삭제하는 것을 잊지 마십시오.
#include <iostream>
int main()
{
unsigned int n;
std::cout << "Enter number of arrays: ";
std::cin >> n;
double** array = new double*[n];
for (int i = 0; i < n; ++i)
{
unsigned int size;
std::cout << "Enter size of array " << i << ": ";
std::cin >> size;
array[i] = new double[size];
for (int j = 0; j < size; ++j)
{
int element;
std::cout << "Enter element " << j << " of array " << i << ": ";
std::cin >> element;
array[i][j] = element;
}
}
for (int i = 0; i < n; ++i)
{
delete [] array[i];
}
delete[] array;
return 0;
}
이 용액을 2 :
그러나, 전술 한 코드와 함께, 각각의 내부 배열의 요소를 액세스하는 문제가된다. 이 방법으로 생성 한 각 내부 배열의 크기를 외우지 않으면 범위를 벗어나는 내용에 액세스 할 수 있습니다. 따라서이 코드를 업데이트하면 또 다른 배열을 추가하는 것이므로 sizeOfInnerArrays
이라고하며 각 요소 i
은 내부 배열 array[i]
의 크기를 추적합니다. 다음 업데이트의 :
#include <iostream>
int main()
{
unsigned int n;
std::cout << "Enter number of arrays: ";
std::cin >> n;
double** array = new double*[n];
unsigned int* sizeOfInnerArrays = new unsigned int[n];
for (int i = 0; i < n; ++i)
{
std::cout << "Enter size of array " << i << ": ";
std::cin >> sizeOfInnerArrays[i];
array[i] = new double[sizeOfInnerArrays[i]];
for (int j = 0; j < sizeOfInnerArrays[i]; ++j)
{
int element;
std::cout << "Enter element " << j << " of array " << i << ": ";
std::cin >> element;
array[i][j] = element;
}
}
//prints out each array as curly-brace enclosed sets of doubles
for (int i = 0; i < n; ++i)
{
std::cout << "{";
for (int j = 0; j < sizeOfInnerArrays[i] - 1; ++j)
{
std::cout << array[i][j] << ", ";
}
std::cout << array[i][sizeOfInnerArrays[i] - 1] << "}" << std::endl;
}
// free dynamically allocated memory
for (int i = 0; i < n; ++i)
{
delete [] array[i];
}
delete[] array;
delete[] sizeOfInnerArrays;
return 0;
}
해결 방법 3 :
그러나,이 너무 복잡하면 조 그 데이터 멤버를 추적, 제안, vector
처럼 용기를 사용하는 것이 더 낫다 그래서 그 크기. 당신이 C++로 프로그래밍되어 있기 때문에
#include <iostream>
#include <vector>
int main()
{
unsigned int n;
std::cout << "Enter number of vectors: ";
std::cin >> n;
std::vector<std::vector<double> > myVec;
//^space between closing angle brackets not needed
// if using C++11 conforming compiler
for (int i = 0; i < n; ++i)
{
unsigned int size;
std::cout << "Enter size of vector " << i << ": ";
std::cin >> size;
std::vector<double> temp;
temp.reserve(size);
for (int j = 0; j < size; ++j)
{
double value;
std::cout << "Enter next value of vector " << i << ": ";
std::cin >> value;
temp.push_back(value);
}
myVec.push_back(temp);
}
for (int i = 0; i < myVec.size(); ++i)
{
std::cout << "{";
for (int j = 0; j < myVec.at(i).size() - 1; ++j)
{
std::cout << myVec.at(i).at(j) << ", ";
}
std::cout << myVec.at(i).back() << "}" << std::endl;
}
return 0;
}
C++에서는이 작업을 수행 할 수 없습니다. 기본적으로 배열 배열을 생성해야합니다 (또는 C++이기 때문에'vector'의'vector's) – Joe
* "for 루프 반복자의 이름이 지정된 배열"* - 왜 특정 이름의 배열이 필요합니까? 이것은 옳은 일처럼 들리지 않습니다. 'std :: vector>'을 사용하면됩니다. –
LihO
나는 당신이하려는 것을 이해하고 있는지 잘 모르겠습니다. C++을 사용하고 있다면'std :: vector> myMatrix'를 사용하면 내부 배열의 항목에 접근 할 수 있습니다 : myMatrix [x] [y]'. 고정 크기 배열을 사용하려면 MxN 행렬을 만드는'std :: array , M> myMatrix'를 사용할 수 있습니다. http://en.cppreference.com/w/를 사용하여 이러한 컨테이너 작업 방법을 이해하십시오. –