小编m.s*_*.s.的帖子

将CUDA设备交错数组转换为元组以进行向量运算

如何将包含交错浮点数的设备数组转换为推力矢量运算的CUDA推力元组.

目的:我使用CUDA上的Marching Cubes生成一个粗略的顶点列表.输出是顶点列表,具有冗余且无连接.我希望得到一个唯一顶点的列表,然后得到这些独特顶点的索引缓冲区,所以我可以执行一些操作,如网格简化等...

float *devPtr; //this is device pointer that holds an array of floats
//6 floats represent a vertex, array size is vertsCount*6*sizeof(float).
//format is [v0x, v0y, v0z, n0x, n0y, n0z, v1x, v1y, v1z, n1x, ...]

typedef thrust::tuple<float, float, float, float, float, float> MCVertex;

thrust::device_vector<MCVertex> inputVertices(vertsCount);

//copy from *devPtr to inputVertices.

//use something like unique to get rid of redundancies.
thrust::unique(inputVertices.begin(), inputVertices.end());
Run Code Online (Sandbox Code Playgroud)

我如何实现副本,还是有其他更好的方法来做到这一点?

c++ cuda thrust

2
推荐指数
1
解决办法
1064
查看次数

C++如何深度复制具有未知数据类型的结构?

我有一个"数据提供者",它将其输出存储在某种类型的结构中

struct DATA_TYPE1{
   std::string data_string;
};
Run Code Online (Sandbox Code Playgroud)

那么这个结构必须被转换成一般的数据类型,我想到了void*或char*,因为将它复制并存储在二叉树中的"中间"对象应该能够存储许多不同类型的这种结构数据.

struct BINARY_TREE_ENTRY{
   void * DATA;
   struct BINARY_TREE_ENTRY * next;
};
Run Code Online (Sandbox Code Playgroud)

然后,此void*由另一个将void*转换回(struct DATA_TYPE1*)以获取原始数据的对象获取.所以发件人和收件人都知道数据类型DATA_TYPE1,而不知道中间的复制对象.

但是,当不知道数据类型时,中间对象如何深层复制不同结构的内容,只有void*并且它没有复制真实内容的方法; dynamic_cast不适用于void*;

"中间"对象应该做的事情如下:

void store_data(void * CASTED_DATA_STRUCT){
   void * DATA_COPY = create_a_deepcopy_of(CASTED_DATA_STRUCT);
   push_into_bintree(DATA_COPY);
}
Run Code Online (Sandbox Code Playgroud)

一个简单的解决方案是发送对象不会删除发送的数据结构,直到接收对象获得它,但是在接收者从中间对象获取数据之前动态创建和删除发送对象,以进行异步通信,因此我想复制它.

而不是将其转换为void*我也尝试转换为中间复制对象知道的超类指针,并且由结构的所有不同数据类型继承:

struct DATA_BASE_OBJECT{
public:
    DATA_BASE_OBJECT(){}
DATA_BASE_OBJECT(DATA_BASE_OBJECT * old_ptr){
         std::cout << "this should be automatically overridden!" << std::endl;
    }
    virtual ~DATA_BASE_OBJECT(){}
};

struct DATA_TYPE1 : public DATA_BASE_OBJECT {
public:
    string str;
    DATA_TYPE1(){}
    ~DATA_TYPE1(){}
    DATA_TYPE1(DATA_TYPE1 * old_ptr){
         str = old_ptr->str;
    }
};
Run Code Online (Sandbox Code Playgroud)

然后相应的二进制树条目将是:

struct BINARY_TREE_ENTRY{
       struct DATA_BASE_OBJECT * …
Run Code Online (Sandbox Code Playgroud)

c++ constructor types subclass

1
推荐指数
1
解决办法
1416
查看次数

STL矢量运算符数据

当我遇到数据运算符时,我只是在阅读有关向量的内容.在下面的示例中,正在使用数据运算符.

#include <iostream>
#include <vector>

int main ()
{
  std::vector<int> myvector (5);

  int* p = myvector.data();

  *p = 10;
  ++p;
  *p = 20;
  p[2] = 100;

  std::cout << "myvector contains:";
  for (unsigned i=0; i<myvector.size(); ++i)
    std::cout << ' ' << myvector[i];
  std::cout << '\n';

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

myvector contains: 10 20 0 100 0
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么0在100和100的位置向后移动一个位置.如:

  1. p是等值的myvector[0],给定值10.
  2. ++p;现在p指向给myvector[1]定的价值20
  3. 所以之后20,100应该来,为什么会这样0.

c++ stl vector

1
推荐指数
1
解决办法
86
查看次数

boost asio 和 WinSock.h 已经包含在内

像许多使用 Boost ASIO 库的人一样,我收到了“WinSock.h 已经包含在内”的错误消息。在其他帖子中,通过将 #include 行移到 #include 上方来回答问题

就我而言,我正在处理一个使用 Wx Widgets 的项目,并且似乎与 MFC 没有任何连接,也没有与 Win32 的直接连接。我找不到任何对 windows.h 的调用,也找不到任何相关的调用。我也试过使用 WIN32_LEAN_AND_MEAN 和 BOOST_ASIO_NO_WIN32_LEAN_AND_MEAN 声明。

我想知道是否有人在编写 Wx Widgets 项目时遇到了与 Boost ASIO 类似的问题?如果是这样,您是否能够解决 Winsock 错误?

c++ boost wxwidgets boost-asio

1
推荐指数
1
解决办法
5725
查看次数

将char指针数组的值复制到char数组

这是一个简单的游戏,我正在尝试学习如何在现有项目中应用C++(这就是我学习的最佳方式),我有使用C#和其他高级语言编程的经验,所以这对我来说还是很新的.所以我有这个比赛列表:

const char* Races[] = {
   "Demon",
   "Human",
   "Elf",
   "Orc",
   "Aliens"
};
Run Code Online (Sandbox Code Playgroud)

有一次,我收到了用户的注册,并选择了比赛.我将用户的所有信息保存到结构中,我也希望将比赛的全名保存到此结构中.

struct User_t {
   unsigned int RaceID;
   char Race[16];
};
Run Code Online (Sandbox Code Playgroud)

以下代码是我将结构中的值放入的代码:

User_t User;

User.RaceID = 3;
strcpy(User.Race, Races[User.RaceID]);
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用.这是游戏的一部分,异常处理非常糟糕(它基本上会在没有任何错误可见的情况下崩溃游戏).我想弄清楚我做错了什么.有什么建议,也许是对其他事情的建议吗?

c++ arrays struct

1
推荐指数
1
解决办法
115
查看次数

std :: wstring中的错误?

我发现了std :: wstring的一些非常奇怪的行为.

#include "stdafx.h"
#include <string>
#include <iostream>

int _tmain(int argc, _TCHAR* argv[])
{
    std::wstring someString = L"Some dummy string";

    std::wstring base1 = L"Base1 ";
    std::wstring base2 = L"Base2 ";
    std::wstring second = L"Second";

    base1 += second.at(0) + L" ";

    base2 += second.at(0);
    base2 += L" ";

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

base1和base2输出应该相同,但没有.Base1实际上不起作用.

有任何想法吗?

c++

1
推荐指数
1
解决办法
116
查看次数

这和*这个区别

以下程序输出是正确的,但是当我使用它代替*this时会出现错误.任何人都可以告诉我这是什么和*这意味着什么

#include<iostream>
using namespace std;

class Test 
{
private:
    static int count;
public:
    Test& fun(); // fun() is non-static now
};

int Test::count = 0;

Test& Test::fun() 
{
    Test::count++;
    cout<<Test::count<<" ";
    return *this;
}

int main()  
{
    Test t;
    t.fun().fun().fun().fun();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

1 2 3 4
Run Code Online (Sandbox Code Playgroud)

当我使用它代替*这个错误来:

In member function 'Test& Test::fun()':
invalid initialization of non-const reference of type 'Test&' from an rvalue of type 'Test*'
     return this;
Run Code Online (Sandbox Code Playgroud)

有人能告诉我这和*之间的区别是什么?

c++ static reference this

1
推荐指数
1
解决办法
95
查看次数

std :: shared_ptr比vector更多的内存空间

我有一个体素结构:

struct voxel
{
    unsigned char R, G, B;
    voxel()
    {
        R = G = B = 0;
    }
    //parameteric contructor with parameters
    voxel(unsigned char pR, unsigned char pG, unsigned char pB)
    {
        R = pR; G = pG; B = pB;
    }
};
Run Code Online (Sandbox Code Playgroud)

对于体素的数量,我有一个非常大的n.

int n = 300 * 300 * 300;
Run Code Online (Sandbox Code Playgroud)

现在,当我用向量初始化体素时,RAM大约需要79 MB.

std::vector< voxel > vi(n);
Run Code Online (Sandbox Code Playgroud)

但是当我使用shared_ptr和堆栈溢出以这种方式初始化时,它需要超过2 GB.

std::vector< std::shared_ptr<voxel> > vi(n);
for (size_t i = 0; i < n; i++)
{
    vi.push_back(std::shared_ptr<voxel>(new voxel()));
}
Run Code Online (Sandbox Code Playgroud)

这种行为可能是什么原因,我该如何避免呢?

补充说明: …

c++ vector shared-ptr

1
推荐指数
1
解决办法
1366
查看次数

用C中的scanf填充数组(最后输入的5个数字需要打印)

我的学校作业有问题,如下所示:

"编写一个程序,重复询问用户输入一个数字,如果用户的输入为0,并且循环结束,则打印数组中的最后5个数字.如果扫描的数字少于5个,则未使用的值必须为0"

它应该看起来像这样:

点击这里查看图片

这是我的代码:

int main()
{
int i, array[4] = {};

while(1)
{
    printf("Next number: <0 = quit>: ");
    scanf("%i", &i);

    if(i!=0)
    {
        array[0] = array[1];
        array[1] = array[2];
        array[2] = array[3];
        array[3] = array[4];
        array[4] = i;
    }

    else
        break;
}

for(i=0; i<=4; i++)
{
    printf("Number %i is: %i\n", i+1, array[i]);
}

return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是当我打印数字时,最后一个数字(数组[4])是0.

我究竟做错了什么?

c arrays pointers scanf

1
推荐指数
1
解决办法
421
查看次数

Swift:种子核心数据数据模型的最简单方法

我正在开发一个简单的iOS 9应用程序(使用Swift和Xcode 7.01),它使用Timehop​​样式界面显示与当天相对应的数据,可以追溯到X年.

我想在第一个运行时播种我的CoreData模型,在第一个运行时(或稍后在用户首选项中更改)基于用户选择的选项使用特定数据填充它.但是,我希望导入整个数据源,以便在更改用户首选项时可以使用不同的数据

我要迁移到CoreData的当前数据源目前是CSV格式.我的问题是,用于导入/播种到CoreData的最简单的文件格式是什么,执行这样的任务时是否有任何最佳实践,并且是否有正确的方向我可以进行实施?

core-data ios swift

1
推荐指数
1
解决办法
801
查看次数