小编Mic*_*aut的帖子

在映射中分配值时正确的求值顺序是什么?

我知道编译器通常是代码中错误的最后一个责任,但我没有看到对以下 C++ 代码的以下行为的任何其他解释(从实际项目中提炼出来):

#include <iostream>
#include <map>

int main()
{
    auto values = { 1, 3, 5 };
    std::map<int, int> valMap;

    for (auto const & val : values) {
        std::cout << "before assignment: valMap.size() = " << valMap.size();
        valMap[val] = valMap.size();
        std::cout << " -> set valMap[" << val << "] to " << valMap[val] << "\n";
    }
}
Run Code Online (Sandbox Code Playgroud)

该代码的预期输出是:

before assignment: valMap.size() = 0 -> set valMap[1] to 0
before assignment: valMap.size() = 1 -> set valMap[3] to 1 …
Run Code Online (Sandbox Code Playgroud)

c++ c++14

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

在命名空间中包装extern"C"库的问题

我正在使用C++的C库(libgretl),它的一些函数与我的代码冲突,所以我想将它包装在一个命名空间中,如下所示:

namespace libgretl {
extern "C" {
    #include <gretl/libgretl.h>
}}
Run Code Online (Sandbox Code Playgroud)

但是,这不能编译,我从gcc文件中获得"未定义"错误(在Windows上使用mingw32和gcc 4.5.2).第一个错误来自文件c ++/cstddef的以下代码块:

_GLIBCXX_BEGIN_NAMESPACE(std)
  using ::ptrdiff_t;
  using ::size_t;
_GLIBCXX_END_NAMESPACE
Run Code Online (Sandbox Code Playgroud)

宏分别扩展到namespace std {}.之后会有更多错误.

省略该extern "C"指令没有帮助.使用匿名命名空间可以减少错误数量,但仍然无法编译.

因此,我的问题是,是否有某种方法可以包含这样的C库并将其功能放入命名空间,而无需更改gcc或库的源文件?

谢谢.

米哈尔

c++ namespaces

8
推荐指数
2
解决办法
6138
查看次数

pandas 数据帧索引:to_list() 与 tolist()

我最近为某人编写了一个 python 脚本,在那里我使用to_list(). 然而,这对他们不起作用,因为他们得到了:AttributeError: 'Index' object has no attribute 'to_list'使用他们的 python 解释器。

我做了一些搜索,发现tolist()似乎也有同样的事情to_list():在Pandas 文档上搜索发现两者,逐字描述相同。另一方面,Index文档只提到了to_list().

所以我想知道两者之间是否有区别

  • 在功能上
  • 受欢迎和/或“官方”/认可
  • 支持不同版本的熊猫

python pandas

8
推荐指数
2
解决办法
8357
查看次数

与mingw的C++异常的奇怪问题

我遇到了使用mingw的异常的奇怪问题,并设法将其剪切为以下示例:

#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;

void test(int a) {
    if (a < 0) {
        throw std::ios_base::failure("a < 0");
    }
}
void test_file(std::string const & fName)
{
    std::ifstream inF(fName.c_str(), std::fstream::in);
    if (!inF) {
        cout << "file error -> throwing exception" << endl;
        throw ios_base::failure("could not open input file '" + fName + "'");
    }
}

int main()
{
    try { test(-5); }
    catch(std::exception& e) {
        cerr << "Exception caught: " << e.what() << " .. continue …
Run Code Online (Sandbox Code Playgroud)

c++ exception-handling mingw32

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

C++ 中的隐式赋值运算符与默认赋值运算符

在 C++ 中,如果我有一个带有可赋值元素的类/结构,我通常不会提供赋值运算符。但是,还可以选择使用C& operator=(C const&) = default;(在头文件中)将其定义为默认值。

除了显式定义可以使运算符私有或受保护这一事实之外,这两种方法之间是否有任何区别?

对于可以省略或设置为 的其他元素(default例如(复制)构造函数)来说,这是否相同?

c++ language-lawyer

6
推荐指数
0
解决办法
436
查看次数

Mercurial:撤消与未更改的更改的自动合并

我没有hg pullhg update在那里我有未提交更改的文件夹上.它为几个文件打开了三向比较/合并工具,但我关闭了它们,因为我不记得更改是比回购中的更新还是更新 - 我认为这会使文件冲突就像它在SVN中所做的那样..但不是,所有文件都合并了:

更新到分支默认更新了
25个文件,合并了0个文件,删除了0个文件,未解析了0个文件

不幸的是,合并以不起作用的方式混合了两个版本.

因此,我的问题是,是否有办法撤消合并并取回本地文件(带有未经修改的更改),就像我之前调用它们一样hg update

(我发现这篇帖子,一位评论者建议hg resolve --tool internal:local,但在我的案例中似乎没有做任何事情.)

谢谢.

merge mercurial

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

用于建模一般树结构及其迭代器的智能指针

我通过为每个节点创建一个类来建模一般的树结构,其中包含指向父节点,第一个子节点和第一个兄弟节点的指针,以及指向最后一个兄弟节点的指针(不需要但很有用).对此,我正在添加一些额外的数据atd.我目前的实施是:

class TreeNode {
    typedef boost::shared_ptr<TreeNode> Ptr;
    typedef boost::weak_ptr<TreeNode> WPtr;

    WPtr p2parent;     ///< pointer to the parent node (NULL in the root)
    Ptr p2sibling;     ///< pointer to the first sibling (or NULL)
    Ptr p2child;       ///< pointer to the first child (or NULL)
    WPtr p2lastChild;  ///< pointer to the last child (not strictly needed)
};
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我正在使用shared_ptr用于兄弟和子节点,因此只需删除其根目录即可删除整个树.对于指向parent的指针,我知道我不应该使用shared_ptr,因为这会创建循环,所以我必须在weak_ptr和原始指针(TreeNode*)之间做出选择 - 任何想法?

对于指向最后一个子节点的(可选)指针,选择在weak_ptr,shared_ptr和原始指针之间 - 什么是使整个类内部一致的最佳选择?

最后,我在结构上有几个迭代器,比如深度优先迭代器atd.迭代器应该在内部使用什么指针:raw pointer,weak_ptr或shared_ptr?这三种方法有哪些优点?

c++ boost iterator smart-pointers

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