我知道我的问题类似于这一个或者这个问题,但是我发现它实际上并不相同,而且,第二个问题没有得到答案,我决定问在添加预处理程序指令时是否正确一个类似函数的宏被调用?
在我的情况下,我有一个类似函数的宏:
#define FUNC_MACRO(a, b) // do something with the variables
Run Code Online (Sandbox Code Playgroud)
如果定义了其他一些宏,我会在代码中的某个地方调用它:
// ...
FUNC_MACRO(aVal
#ifdef ANOTHER_MACRO
+ offset
#endif // ANOTHER_MACRO
, bVal);
// ...
Run Code Online (Sandbox Code Playgroud)
我在我的机器上测试过(linux,用gcc 4.8)并且它工作正常(有和没有预处理器指令,有和没有定义ANOTHER_MACRO),但这样做是否安全?
我从第一个类似问题的答案中读到了16.3/9段落,但我的情况也是如此吗?
我有一个叫做分支master,另一个叫做dev.通常,我会进行测试和改进dev,当确定它没关系时,我将其合并master,然后标记并发布应用程序的新版本.我遇到了两个合并案例:
master到dev,和dev成master,但我不确定这两者有何不同......任何解释都会受到欢迎.
我知道在比较char指针和一些char值时你需要在指针前加上*,但我在一些代码中找到了一个比较:
char* c;
// ...
while (*c != ']' && *c != '\0') // search for some character
{
c++;
}
if (c == '\0')
{
return -1; // error
}
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是:这是一个错误还是一个特例?不应该if (*c == '\0')有吗?
由于内存不足,我有一个错误的代码.实际上我在大数据上做了一个线性模型(lm).问题不是因为它给了我错误,我想记录,但因为它包含value[[3L]](cond).
我的错误看起来像这样:
Error in value[[3L]](cond): While training model Error: cannot allocate vector of size 6.4 Gb
Run Code Online (Sandbox Code Playgroud)
记录它的代码看起来像这样(使用logging lib):
tryCatch({
# some code
tryCatch({
# some other code
}, warning = function(war){
logwarn(war, logger = "MyLogger")
}, error = function(err){
stop(paste("While training model", err, sep = " "))
})
some more code
}, error = function(err){
logerror(err, logger = "MyLogger")
})
Run Code Online (Sandbox Code Playgroud)
我的问题是它为什么这么说Error in value[[3L]](cond):?我做错了,我不知道是不是错了?不应该只是Error: <error message>吗?
我正在尝试使用GoogleTest对函数进行测试,现在它不再找到了这个EqFailure 东西:
/usr/include/gtest/gtest.h:1337: undefined reference to `testing::internal::EqFailure(char const*, char const*, testing::internal::String const&, testing::internal::String const&, bool)'
Run Code Online (Sandbox Code Playgroud)
我正在写这样的测试:
test_file.cpp:
#include <gtest/gtest.h>
#include "tools/CMorphology.hpp"
TEST(erode_Morph, crossKernel_Morph)
{
// initialize matrix to be eroded
cv::Mat matrix = (cv::Mat_<uchar>(5, 5) << 1, 1, 1, 1, 1,
1, 1, 0, 1, 1,
1, 1, 1, 1, 1,
1, 0, 1, 1, 1,
1, 1, 1, 1, 1
);
// initialize the cross kernel
cv::Mat kernel = cv::getStructuringElement(cv::MORPH_CROSS, cv::Size(3, 3));
// initialize the vector …Run Code Online (Sandbox Code Playgroud) 我有一个类有成员的类std::vector.在某些地方,我需要另一个类中该向量的大小.因为该成员是私有的,所以我创建了一个getter来返回它.在查看代码时,我脑海中浮现出一个问题:调用getter是否更好,然后size()创建"size getter"是好还是好?
这是我的班级:
class MyClass
{
private:
std::vector< int > m_myVec;
public:
std::vector< int > getMyVec() const { return m_myVec; }
// Shall I create:
// std::size_t getMyVecSize() const { return m_myVec.size(); }
// ... other function
};
Run Code Online (Sandbox Code Playgroud)
在代码的其他部分我做:
std::size_t sz = myClsObj.getMyVec().size(); // or
if (myClsObj.getMyVec().size() > 5) { /*...*/ }
Run Code Online (Sandbox Code Playgroud)
这样做是一种好习惯,还是我会创建并称之为"尺寸吸气剂"?
我需要向量(在代码的其他部分我称之为getter)和它的大小; 所以没有必要选择保留其中一个吸气剂.
另一个事实是我使用的是C++ 11,因此不需要返回const引用.
基于C++ 11:如果我调用它是否如此聪明不返回向量但是它的大小myClsObj.getMyVec().size()?
我在C++中做了一个测试,要求一个函数返回一个索引,它将输入向量分成两部分,具有相同的元素总和,例如:对于vec = {1, 2, 3, 5, 4, -1, 1, 1, 2, -1},它可能返回3,因为1 + 2 + 3 = 6 = 4-1 + 1 + 1 + 2-1.所以我完成了返回正确答案的函数:
int func(const std::vector< int >& vecIn)
{
for (std::size_t p = 0; p < vecin.size(); p++)
{
if (std::accumulator(vecIn.begin(), vecIn.begin() + p, 0) ==
std::accumulator(vecIn.begin() + p + 1, vecIn.end(), 0))
return p;
}
return -1;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是当输入是一个只包含1(或-1)的非常长的向量时,函数的返回很慢.所以我想到从中间开始搜索想要的索引,然后左右移动.但我认为最好的方法是索引处于合并排序算法顺序,即:n/2,n/4,3n/4,n/8,3n/8,5n/8,7n/8 ...其中n是向量的大小.有没有办法在公式中写这个顺序,所以我可以在我的函数中应用它?
谢谢
编辑 经过一些评论我不得不提到我几天前已经完成了测试,所以我忘了提及没有解决方案的部分:它应该返回-1 ...我已经更新了问题标题.
我开始在Linux上测试VSCode,我希望看到变量的十六进制值接近其值.我需要它,因为变量是一个掩码,所以它在某些位置由0和1组成.我没有找到设置或类似的东西来添加它,是否可能?我正在使用c ++代码.我看到地址是十六进制的,所以有没有办法以十六进制的形式查看变量的值?
我创建了一个表,该表在我用来生成背景颜色 ( Format -> Conditional Formatting -> Color Scale... -> Colour Scale) 的一列上有一个值。现在我希望所有的行都有那种颜色。是否可以从另一个单元格复制背景颜色?
编辑:
所以这是我的表:

我想要的是用与总组相同的颜色为类组中的所有单元格着色。
这意味着对于 101 类,我希望所有单元格与包含 592 的单元格具有相同的黄橙色:
(这是手动完成的)
我希望这是某种公式,因此最后一列中的任何更改都会更改所有颜色。是否可以?
我试图验证输入字符串中是否有特定字符串,如果是,则根据找到的字符串执行某些操作; 但无论如何......它似乎总是在做第一项任务......
if (inputString.find(str1) >= 0)
{
//do something
}
else if (inputString.find(str2) >= 0)
{
// do something else
}
else
{
std::cout << "Strange" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
// do something无论是否str1存在,它总是进入区块inputString.
如果我做
int str1pos = inputString.find(str1);
int str2pos = inputString.find(str2);
if (str1pos >= 0)
{
//do something
}
else if (str2pos >= 0)
{
// do something else
}
else
{
std::cout << "Strange" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
它似乎工作.这是为什么?我究竟做错了什么?