创建指向其他指针的指针数组

时间:2011-04-07 21:48:19

标签: c++

那么我如何创建一个包含指向其他数组的指针的数组,这样我仍然可以访问整个数组指向的数组?我试过这个:

#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;
}

希望这不是混乱或荒谬,谢谢你的帮助。

3 个答案:

答案 0 :(得分:1)

您似乎正在寻找std::vector

#include <vector>

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

但请注意,std::vector<bool>不是普通的“容器”,并且不支持像vector<any_type_other_than_bool>这样的普通容器的所有操作。

答案 1 :(得分:0)

你可以使用malloc。当然,那是C代码,而不是C ++:

#include <cstring>
#include <cstdlib>

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

或者,你可以像Jerry Coffin所说的那样做。但是,这并没有为您提供带向量指针的向量。它为您提供了向量的向量(因此堆栈已分配,而不是堆上)。要获得向量的指针向量,您可以执行以下操作:

#include <vector>

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

另一种可能性是根据您的需要使用boost::scoped_arrayboost::shared_array之一。

答案 2 :(得分:0)

bool (*arrays)[3]声明arrays是一个指向3个bool数组的指针 - 你想要一个3个指向bool的数组,或bool *arrays[3]。要动态指向该指针,只需要bool **arrays = new bool*[3];