我想这是一个简单的问题.我需要做这样的事情:
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,然后稍后对其进行排序.也许那更好? 我知道这是一个常见的问题,但是在寻找参考资料和其他材料时,我找不到这个问题的明确答案.
请考虑以下代码:
#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
我正在用g++和编译一个c ++程序ld.我有一个.so我希望在链接期间使用的库.但是,存在一个同名的库/usr/local/lib,并且ld正在选择我直接指定的库.我怎样才能解决这个问题?
对于下面的示例,我的库文件是/my/dir/libfoo.so.0.我尝试过的东西不起作用:
g++ -g -Wall -o my_binary -L/my/dir -lfoo bar.cpp/my/dir到我的$PATHen`变量的开头或结尾/my/dir/libfoo.so.0为g ++的参数我知道非类型模板参数应该是一个常量整数表达式.有人可以解释为什么会如此?
template <std::string temp>
void foo()
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)error C2993: 'std::string' : illegal type for non-type template parameter 'temp'.
我理解常量积分表达式是什么.不允许非常量类型的原因是什么,如std::string上面的代码片段?
我正在为嵌入式项目使用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,所以看起来它们是平等的.是否有理由像他们一样编写代码?
我想将一个函数指针设置为一个类的成员,该类是指向同一个类中另一个函数的指针.我这样做的原因很复杂.
在这个例子中,我希望输出为"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)
但这在编译时失败了.为什么?
使具有多个参数的构造函数explicit具有任何(有用)效果吗?
例:
class A {
public:
explicit A( int b, int c ); // does explicit have any (useful) effect?
};
Run Code Online (Sandbox Code Playgroud) 如何以相同的方式对两个向量进行排序,使用仅使用其中一个向量的条件?
例如,假设我有两个相同大小的向量:
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中吗?
假设我正在为二叉树创建一个类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页面有不同类型的功能,但不是类朋友关系的例子(和猜测语法没有收敛的解决方案还).我更愿意了解如何使我希望定义的朋友关系类型的规范更正确.
所以下面的代码使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之间的值