那么我如何创建一个包含指向其他数组的指针的数组,这样我仍然可以访问整个数组指向的数组?我试过这个:
#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;
}
希望这不是混乱或荒谬,谢谢你的帮助。
答案 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_array或boost::shared_array之一。
答案 2 :(得分:0)
bool (*arrays)[3]
声明arrays
是一个指向3个bool数组的指针 - 你想要一个3个指向bool的数组,或bool *arrays[3]
。要动态指向该指针,只需要bool **arrays = new bool*[3];