2011-04-07 90 views
1

那麼我將如何創建一個包含指向其他數組的指針的數組,以便我仍然可以訪問整個數組指向的數組?我嘗試這樣做:創建一個指向其他指針的數組

#include <iostream> 

using namespace std; 

int main (void) 
{ 

bool (*arrays)[3], *arr1, *arr2, *arr3, *tempArr; 

arr1 = new bool[2]; 
arr2 = new bool[2]; 
arr3 = new bool[2]; 

arr1[0] = arr2[0] = arr3[0] = 0; 
arr1[1] = arr2[1] = arr3[1] = 1; 

arrays[0] = arr1; 
arrays[1] = arr2; 
arrays[2] = arr3; 

int n = 0; 

while (n <= 2) { 

    tempArr = arrays[n]; 

    cout << tempArr[0] << tempArr[1] << "\n"; 
} 
} 

此外,我將如何使整個陣列(「陣列」)指針,以便我可以添加新的陣列呢?我做了一個初步的功能,但它不能正常工作(注意「路徑」是整個陣列):

void addPath (void) 
{ 

int n = getArrayLength(paths), i = 0; 
bool (*newPaths)[n + 1]; 

while (i < n) { 

    newPaths[i] = paths[i]; 

    ++i; 
} 

delete [] paths; 

newPaths[n] = tempPath; 

paths = newPaths; 
} 

但願這不是混亂的或荒謬的,感謝您的幫助。

+1

如果搜索「C++數組指針」,則可能出現幾十個問題中的任何一個, – 2011-04-07 21:53:31

回答

1

看來,你要找的std::vector

#include <vector> 

std::vector<std::vector<bool> > paths; 

但是請注意,這std::vector<bool>是不正常的「容器」,並且不支持標準集裝箱的所有操作,如vector<any_type_other_than_bool>將。

0

你可以使用malloc。當然,這是一種C代碼,而不是C++:

#include <cstring> 
#include <cstdlib> 

size_t ptrArraySize = 3; 
bool** arrays = (bool**) malloc(ptrArraySize * sizeof(bool*)); 

或者,你可以做的棺材傑裏建議。但是,這並不會給你帶有指向向量指針的向量。它給你一個向量矢量(所以堆棧分配,而不是在堆上)。使用的boost::scoped_arrayboost::shared_array之一,根據您的需要

#include <vector> 

std::vector<std::vector<bool> * > ptrVector; 
std::vector<bool> * vectorA = new std::vector<bool>(); 
vectorA->push_back(true); 
ptrVector.push_back(vectorA); 

另一種可能性:要獲得指針到向量的向量,你可以做這樣的事情。

0

bool (*arrays)[3]聲明arrays是一個指向3個布爾數組的指針 - 你需要一個3指針數組到bools或bool *arrays[3]。若要動態指向該指針,只需要bool **arrays = new bool*[3];

相關問題