小编Roe*_*oel的帖子

std :: vector和c风格的数组

我正在尝试使用OpenCL来提高我们软件的速度.我们经常使用地图,为简化起见,将地图表示为std :: vector <std :: vector>.OpenCL API将原始的c样式指针作为参数,例如上面的情况中的int*.

我的问题:

  • 在stl中是否存在实现保证,向量内部是否在内存中连续?
  • 我可以安全地将std :: vector转换为int*并期望它能够工作吗?
  • 在向量向量的情况下,我仍然可以认为这是正确的吗?我希望矢量可以保存其他状态数据,或对齐问题,或者其他东西......
  • 解决这个问题的最佳方法是什么?编写一个自定义的2d数据结构,它包含一个内部的,连续的内存缓冲区并使用它?我必须要复制到矢量/从矢量...

谢谢.

c++ stl opencl

9
推荐指数
2
解决办法
5807
查看次数

MFC Feature Pack类菜单上的图标

菜单中有三个位置显示在新的MFC功能(Feature Pack)中:

  • 在菜单栏(CMFCMenuBar)中
  • 在弹出菜单中(CMFCPopupMenu)
  • 在CMFCButton的"下拉菜单"版本中

我想在所有菜单的菜单中加上图标(高色和透明).我找到了CFrameWndEx :: OnDrawMenuImage(),我可以使用它来自定义菜单栏项目前面的图标.这不是很方便,不得不在2008年实施图标绘制,但它确实有效.对于其他人,我还没有找到解决方案.是否有自动设置菜单图标的方法?

mfc mfc-feature-pack

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

如何从boost :: ptr_vector中删除元素

所以我试图通过使用boost :: ptr_vector来摆脱我的std :: vector.现在我正在尝试从一个元素中删除元素,并删除已删除的元素.对我来说最明显的事情是:

class A
{ int m; };

boost::ptr_vector<A> vec;
A* a = new A;
vec.push_back(a);
vec.erase(a);
Run Code Online (Sandbox Code Playgroud)

但这甚至不会编译(请参阅下面的完整错误消息).我尝试了删除/删除习惯,就像我在std :: vector上所做的那样,但是boost :: ptr_vector的所有算法都与std :: vector中的算法略有不同.

所以我的问题:

  • 如何从ptr_vector中删除指针?
  • 我是否仍需要手动删除()我删除的元素?

编译错误:

1>------ Build started: Project: ptr_vector_test, Configuration: Debug Win32 ------
1>Compiling...
1>ptr_vector_test.cpp
1>c:\users\rvanhout\svn\trunk\thirdparty\boost\range\const_iterator.hpp(37) : error C2825: 'C': must be a class or namespace when followed by '::'
1>        c:\users\rvanhout\svn\trunk\thirdparty\boost\mpl\eval_if.hpp(63) : see reference to class template instantiation 'boost::range_const_iterator<C>' being compiled
1>        with
1>        [
1>            C=A *
1>        ]
1>        c:\users\rvanhout\svn\trunk\thirdparty\boost\range\iterator.hpp(63) …
Run Code Online (Sandbox Code Playgroud)

c++ boost ptr-vector

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

来自C++的MSXML - 漂亮的打印/缩进新创建的文档

我正在使用MSXML解析器写出XML文件,我从这里下载了一个包装器:http://www.codeproject.com/KB/XML/JW_CXml.aspx.除了当我从代码创建一个新文档(因此不从文件和修改加载)时,效果很好,结果都在一个大的行中.我希望元素能够很好地缩进,以便我可以在文本编辑器中轻松阅读.

谷歌搜索显示许多人有同样的问题 - 大约在2001年左右问.回复通常会说"应用XSL转换"或"添加自己的空白节点".特别是最后一个让我走了%(所以我希望在2008年有一个更简单的方法来实现漂亮的MSXML输出.所以我的问题;是的,我该如何使用它?

xml msxml pretty-print

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

为什么此类声明不适用于Visual Studio

所以我试图获得一些为gcc编写的代码,以便在Visual Studio 2008上编译.我有一个问题,我已经缩小到这个:

class value_t
{
public:
  typedef std::deque<value_t>         sequence_t;
  typedef sequence_t::iterator        iterator;
};
Run Code Online (Sandbox Code Playgroud)

此代码失败:

1>cpptest.cpp
1>c:\program files\microsoft visual studio 9.0\vc\include\deque(518) : error C2027: use of undefined type 'value_t'
1>        c:\temp\cpptest\cpptest.cpp(10) : see declaration of 'value_t'
1>        c:\temp\cpptest\cpptest.cpp(13) : see reference to class template instantiation 'std::deque<_Ty>' being compiled
1>        with
1>        [
1>            _Ty=value_t
1>        ]
1>c:\program files\microsoft visual studio 9.0\vc\include\deque(518) : error C2027: use of undefined type 'value_t'
1>        c:\temp\cpptest\cpptest.cpp(10) : see declaration of 'value_t'
Run Code Online (Sandbox Code Playgroud)

但是当我用std :: vector尝试这个时,编译很好:

class …
Run Code Online (Sandbox Code Playgroud)

c++ templates

6
推荐指数
2
解决办法
2790
查看次数

OpenGL版本和gpus - 有什么样的兼容性?

我试图了解显卡版本,OpenGL版本和API标头如何协同工作.我已经阅读了OpenGL论坛和其他地方的OpenGL 2.0/3.0/3.1崩溃,但目前还不清楚这对我作为开发人员(OpenGL新手)的影响.(顺便说一句,我在这个问题中使用nVidia作为一个例子,因为我正在购买他们的一张卡,但显然我希望与我开发的软件不相关供应商).

首先,GPU需要支持OpenGL版本.但是,例如nVidia有较旧的视频卡驱动程序支持OpenGL 3.这是否意味着这些驱动程序在软件中实现某些功能来模拟硬件中没有的新功能?

然后是API标头.如果我决定为OpenGL 3编写一个应用程序,我应该等到Microsoft发布带有支持该版本的标头的平台SDK的更新版本吗?你如何选择使用哪个版本的API - 通过代码中的预处理器定义,或者更新到最新平台SDK只需升级到最新版本(无法想象最后一个选项,但你永远不知道. ..).

向后兼容性怎么样?如果我编写一个针对OpenGL 1.2的应用程序,为其支持OpenGL 3的卡安装驱动程序的用户是否仍然可以运行它,或者我应该在我的应用程序中测试该卡的功能/支持的版本?阅读http://developer.nvidia.com/object/opengl_3_driver.html似乎确认至少对于针对1.2编写的nVidia卡应用程序将继续工作,但这也意味着其他供应商可能会停止支持1.2 API.基本上,这将使我(可能)处于未来的位置,软件将无法使用最近的卡,因为它们不再支持1.2.但是,如果我今天为OpenGL 3甚至2开发,我可能会拒绝那些只支持gpu的用户1.2.

我不需要OpenGL中的奇特功能 - 我几乎不使用任何着色,固定管道对我来说很好(我的应用程序是类CAD).什么是基于新应用程序的最佳版本,期望它将成为一个长期存在的应用程序,并在未来几年内进行增量更新?

我可能忘记了在这种情况下相关的其他问题,我们非常感谢任何见解.

opengl

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

转换为复合赋值运算符?

我的代码,简化为本质,可以归结为:

int x = 5;
x *= 0.5;
Run Code Online (Sandbox Code Playgroud)

使用 Visual Studio 进行编译时,我收到一条关于可能丢失数据的警告 C4244 - 当然,因为(简化的)int 与 double 的乘法会产生 double,然后将其转换为 int,从而丢失非整数部分。

我的问题是,是否有 C++ 语法来表明这是预期的行为,以便使警告静音(我知道 pragma push/pop 可以禁用警告,我认为更清楚地表明这实际上是预期的行为,并且我不仅仅是压制警告)。

长形式是在乘法之后显式转换,如下所示:

x = (int)(x * 0.5);
Run Code Online (Sandbox Code Playgroud)

但复合运算符表示法更容易阅读。

那么,有没有一种方法可以这样投呢?我尝试过将“(int)”放在我能想到的每个位置,但它们似乎都不是有效的 C++ :(

c++

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

隐式调用复制构造函数

考虑:

struct Foo
{
    Foo(std::string str) {}
};

struct Bar
{
    Bar(Foo f) {}
};

int main(int argc, char* argv[])
{
    Foo f("test");

    Bar b1(f);
    Bar b2(std::string("test"));
    Bar b3("test");

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

这无法在b3的声明上编译('不能将参数1从'const char [5]'转换为'Foo'').这是有道理的,因为没有直接的方法将const char转换为Foo.但是,有一种方法可以将const char转换为std :: string,然后使用它来构造一个Foo(这是b1和b2中发生的事情),这就是我想要的,因为它使API更好使用(不必每次都显式地实例化Foo或std :: string).

所以我的问题是:有没有办法让编译器隐式调用Foo(std :: string)复制构造函数?换句话说,有没有办法像b3那样进行声明工作,让它与b2相同,并且不为foo声明一个const char*copy构造函数?(最后一件事情是显而易见的,但我真正的代码当然不是那么简单,我宁愿不必添加const char*copy构造函数并正确处理构造函数中的所有其他初始化并将其保留在与std :: string复制构造函数同步).

c++

5
推荐指数
2
解决办法
153
查看次数

Nullptr在三元运算符中

考虑:

struct A { bool operator==(const A& that) { return true; } };
boost::optional<A&> f()
{
    std::vector<A> vec;
    auto it = std::find(vec.begin(), vec.end(), A());

    // Version A
    return (it == vec.end() ? nullptr : *it);

    // Version B
    if (it == vec.end()) {
        return nullptr;
    } else {
        return *it;
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么版本A没有编译(错误C2446:':':没有从'A'转换为'nullptr')而版本B呢?

(我知道我可以这样做

return (it == vec.end() ? boost::optional<A&>() : *it);
Run Code Online (Sandbox Code Playgroud)

,我的问题是:为什么nullptr的构造显然与三元运算符不同?)

仅在msvc12(= Visual Studio 2013)上测试.

c++

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

数据[,"col"]和数据$ col之间的差异

从本网站上有关类似问题的其他答案,例如来自http://www.r-tutor.com/r-introduction/data-frame/data-frame-column-vector网页,似乎我提取了一个变量从data.frame,data[ , "col"]并且data$col应该得到同样的结果.但现在我在Excel中有一些数据:

LU  Urban_LU    LU_Index    Urban_LU_index
Residential Residential 2   0
Rural residential   Residential 3   0
Commercial  Commercial  4   1
Public institutions including education Industrial  5   1
Industry    Industrial  7   2
Run Code Online (Sandbox Code Playgroud)

)

read_excelreadxl包中读到它:

library(readxl)
data <- read_excel("data.xlsx", "Sheet 1")
Run Code Online (Sandbox Code Playgroud)

现在我使用[或从数据框中提取单个变量$:

data[ , "LU"]
# Source: local data frame [5 x 1]
# 
#                                        LU
#                                     (chr)
# 1                             Residential
# 2                       Rural …
Run Code Online (Sandbox Code Playgroud)

r dataframe

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

标签 统计

c++ ×6

boost ×1

dataframe ×1

mfc ×1

mfc-feature-pack ×1

msxml ×1

opencl ×1

opengl ×1

pretty-print ×1

ptr-vector ×1

r ×1

stl ×1

templates ×1

xml ×1