考虑下面的代码。我要做的是从提供的值数组中初始化一个指针数组。我正在尝试找出将这些值复制到指针中的最佳方法,并以一种C++11的方式完成。我正在使用VS2010编译这段代码。
真正让我头疼的部分是必须使用外部"i“来获取指针数组的正确索引。我考虑过使用std::array来解决这个问题,但我在使用std::算法时遇到了很多问题,比如for_each,并让它在VS2010下编译。这可能只是用户的错误。
如果有人能向我展示正确编译VS2010的语法,我对使用std::array持开放态度。我没有在stackoverflow或其他地方找到std::array的好例子。我也不能完全确定它是否能解决外部"i“的问题。
template <int ArraySize>
class testWithArray
{
public:
testWithArray(int* myarray)
{
std::for_each(ArrayOfPointers_, ArrayOfPointers_ + ArraySize, [] (int* arrayElem)
{
arrayElem = new int (0);
});
int i = 0;
std::for_each(myarray, myarray + ArraySize, [&] (int arrayElem)
{
*(ArrayOfPointers_[i++]) = arrayElem;
});
}
private:
int* ArrayOfPointers_[ArraySize];
};
void main()
{
int plainArray[5] = {0,1,2,3,4};
testWithArray<5> myArrayClass(plainArray);
}发布于 2013-06-11 03:35:04
我真的不知道为什么你要使用一个指向整数的指针数组,而不是一个整数数组(这是我强烈推荐的),但是如果这确实是你需要的,并且你知道你在做什么(包括你的程序当前正在泄漏内存的事实),那么你可以使用std::transform()以这种方式重写你的构造函数:
#include <algorithm>
// ...
testWithArray(int* myarray)
{
std::transform(myarray, myarray + ArraySize, ArrayOfPointers_,
[] (int arrayElem)
{
return new int(arrayElem);
});
}但是再一次,考虑一下你是否真的需要一个指针数组。如果真的有必要,那么考虑使用智能指针而不是原始指针(选择为您的应用程序建模最合适的所有权策略的指针)。
https://stackoverflow.com/questions/17031279
复制相似问题