2011-04-07 81 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];