小编Rak*_*111的帖子

用于std :: set的std :: back_inserter?

我想这是一个简单的问题.我需要做这样的事情:

std::set<int> s1, s2;
s1 = getAnExcitingSet();
std::transform(s1.begin(), s1.end(), std::back_inserter(s2), ExcitingUnaryFunctor());
Run Code Online (Sandbox Code Playgroud)

当然,std::back_inserter因为没有,所以不起作用push_back. std::inserter还需要一个迭代器?我没有用过,std::inserter所以我不知道该怎么做.

有没有人有想法?


当然,我的另一个选择是使用向量s2,然后稍后对其进行排序.也许那更好?

c++ algorithm stl

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

连接字符串不能按预期工作

我知道这是一个常见的问题,但是在寻找参考资料和其他材料时,我找不到这个问题的明确答案.

请考虑以下代码:

#include <string>

// ...
// in a method
std::string a = "Hello ";
std::string b = "World";
std::string c = a + b;
Run Code Online (Sandbox Code Playgroud)

编译器告诉我它找不到重载的运算符char[dim].

这是否意味着在字符串中没有+运算符?

但在几个例子中,存在类似这样的情况.如果这不是连接更多字符串的正确方法,那么最好的方法是什么?

c++ string-concatenation standard-library stdstring operator-keyword

84
推荐指数
4
解决办法
22万
查看次数

如何指定库路径的首选项?

我正在用g++和编译一个c ++程序ld.我有一个.so我希望在链接期间使用的库.但是,存在一个同名的库/usr/local/lib,并且ld正在选择我直接指定的库.我怎样才能解决这个问题?

对于下面的示例,我的库文件是/my/dir/libfoo.so.0.我尝试过的东西不起作用:

  • 我的g ++命令是 g++ -g -Wall -o my_binary -L/my/dir -lfoo bar.cpp
  • 添加/my/dir到我的$PATHen`变量的开头或结尾
  • 添加/my/dir/libfoo.so.0为g ++的参数

c++ linker g++

83
推荐指数
4
解决办法
21万
查看次数

非类型模板参数

我知道非类型模板参数应该是一个常量整数表达式.有人可以解释为什么会如此?

template <std::string temp>
void foo()
{
     // ...
}
Run Code Online (Sandbox Code Playgroud)
error C2993: 'std::string' : illegal type for non-type template parameter 'temp'.
Run Code Online (Sandbox Code Playgroud)

我理解常量积分表达式是什么.不允许非常量类型的原因是什么,如std::string上面的代码片段?

c++ templates

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

为什么三元运算符用于在宏中定义1和0?

我正在为嵌入式项目使用SDK.在这个源代码中,我发现了一些代码,至少我发现这些代码很奇怪.在SDK的许多地方都有这种格式的源代码:

#define ATCI_IS_LOWER( alpha_char )  ( ( (alpha_char >= ATCI_char_a) && (alpha_char <= ATCI_char_z) ) ? 1 : 0 )

#define ATCI_IS_UPPER( alpha_char )  ( ( (alpha_char >= ATCI_CHAR_A) && (alpha_char <= ATCI_CHAR_Z) ) ? 1 : 0 )
Run Code Online (Sandbox Code Playgroud)

这里使用三元运算符有什么不同吗?

是不是

#define FOO (1 > 0)
Run Code Online (Sandbox Code Playgroud)

同样的

#define BAR ( (1 > 0) ? 1 : 0)
Run Code Online (Sandbox Code Playgroud)

我尝试使用它来评估它

printf("%d", FOO == BAR);
Run Code Online (Sandbox Code Playgroud)

得到结果1,所以看起来它们是平等的.是否有理由像他们一样编写代码?

c c++ boolean ternary-operator

79
推荐指数
6
解决办法
8697
查看次数

指向成员函数的函数指针

我想将一个函数指针设置为一个类的成员,该类是指向同一个类中另一个函数的指针.我这样做的原因很复杂.

在这个例子中,我希望输出为"1"

class A {
public:
 int f();
 int (*x)();
}

int A::f() {
 return 1;
}


int main() {
 A a;
 a.x = a.f;
 printf("%d\n",a.x())
}
Run Code Online (Sandbox Code Playgroud)

但这在编译时失败了.为什么?

c++ oop function-pointers

78
推荐指数
5
解决办法
9万
查看次数

显式构造函数采用多个参数

使具有多个参数的构造函数explicit具有任何(有用)效果吗?

例:

class A {
    public:
        explicit A( int b, int c ); // does explicit have any (useful) effect?
};
Run Code Online (Sandbox Code Playgroud)

c++ explicit-constructor

77
推荐指数
4
解决办法
6473
查看次数

如何以相同的方式对两个向量进行排序,使用仅使用其中一个向量的条件?

如何以相同的方式对两个向量进行排序,使用仅使用其中一个向量的条件?

例如,假设我有两个相同大小的向量:

vector<MyObject> vectorA;
vector<int> vectorB;
Run Code Online (Sandbox Code Playgroud)

然后我vectorA使用一些比较函数排序.排序重新排序vectorA.如何应用相同的重新排序vectorB


一种选择是创建一个结构:

struct ExampleStruct {
    MyObject mo;
    int i;
};
Run Code Online (Sandbox Code Playgroud)

然后对包含内容vectorA并将其vectorB压缩为单个向量的向量进行排序:

// vectorC[i] is vectorA[i] and vectorB[i] combined
vector<ExampleStruct> vectorC;
Run Code Online (Sandbox Code Playgroud)

这似乎不是一个理想的解决方案.还有其他选择,特别是在C++ 11中吗?

c++ c++11

74
推荐指数
3
解决办法
2万
查看次数

模板类朋友的类模板,这里到底发生了什么?

假设我正在为二叉树创建一个类BT,我有一个描述树的元素的类BE,类似于

template<class T> class BE {
    T *data;
    BE *l, *r;
public:
...
    template<class U> friend class BT;
};

template<class T> class BT {
    BE<T> *root;
public:
...
private:
...
};
Run Code Online (Sandbox Code Playgroud)

这似乎有效; 但我对下面发生的事情有疑问.

我最初试图宣布这位朋友为

template<class T> friend class BT;
Run Code Online (Sandbox Code Playgroud)

但是这里似乎有必要使用U(或其他东西T),为什么会这样?这是否意味着任何特定BT的朋友对任何特定的BE班级都是朋友?

在模板和朋友IBM页面有不同类型的功能,但不是类朋友关系的例子(和猜测语法没有收敛的解决方案还).我更愿意了解如何使我希望定义的朋友关系类型的规范更正确.

c++ templates class

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

rand()介于0和1之间

所以下面的代码使0 <r <1

r = ((double) rand() / (RAND_MAX))
Run Code Online (Sandbox Code Playgroud)

为什么 r = ((double) rand() / (RAND_MAX + 1))让-1 <r <0?

不应该向RAND_MAX添加一个使1 <r <2?

编辑:我收到一个警告:表达式中的整数溢出

在那条线上,这可能是问题所在.我刚刚做了cout << r << endl,它肯定给了我介于-1和0之间的值

c++ random

68
推荐指数
3
解决办法
24万
查看次数