首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++11λ指针数组初始化

C++11λ指针数组初始化
EN

Stack Overflow用户
提问于 2013-06-11 03:26:15
回答 1查看 914关注 0票数 0

考虑下面的代码。我要做的是从提供的值数组中初始化一个指针数组。我正在尝试找出将这些值复制到指针中的最佳方法,并以一种C++11的方式完成。我正在使用VS2010编译这段代码。

真正让我头疼的部分是必须使用外部"i“来获取指针数组的正确索引。我考虑过使用std::array来解决这个问题,但我在使用std::算法时遇到了很多问题,比如for_each,并让它在VS2010下编译。这可能只是用户的错误。

如果有人能向我展示正确编译VS2010的语法,我对使用std::array持开放态度。我没有在stackoverflow或其他地方找到std::array的好例子。我也不能完全确定它是否能解决外部"i“的问题。

代码语言:javascript
复制
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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-11 03:35:04

我真的不知道为什么你要使用一个指向整数的指针数组,而不是一个整数数组(这是我强烈推荐的),但是如果这确实是你需要的,并且你知道你在做什么(包括你的程序当前正在泄漏内存的事实),那么你可以使用std::transform()以这种方式重写你的构造函数:

代码语言:javascript
复制
#include <algorithm>

// ...

testWithArray(int* myarray)
{
    std::transform(myarray, myarray + ArraySize, ArrayOfPointers_,
        [] (int arrayElem)
    {
        return new int(arrayElem);
    });
}

但是再一次,考虑一下你是否真的需要一个指针数组。如果真的有必要,那么考虑使用智能指针而不是原始指针(选择为您的应用程序建模最合适的所有权策略的指针)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17031279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档