这是strCopy的一个实现
void strcopy2(char *dst, char const *src){
while ((*dst++ = *src++))
;
}
Run Code Online (Sandbox Code Playgroud)
我们的教授要求我们在不使用指针的情况下重现这段代码,所以我想出了以下函数:
void strcopy(char dst[], char const src[]){
size_t i = 0;
while (dst[i] = src[i++])
;
}
Run Code Online (Sandbox Code Playgroud)
它运行良好,但我意识到,在引擎盖下,函数必须仍然使用指针,因为我们无处可返回任何值.换句话说,我虽然最后一个函数会使用pass by value但显然并非如此.那么在水下发生了什么,这两种方法之间究竟有什么区别吗?
对于C++类,我想设计一个类层次结构,处理二进制运算+= 和-=.所需的层次结构(每个问题要求)描述如下.我们有两个类Addition和Subtraction.这些是类的基类Binops.然后一个类Operations继承自Binops.所以图表看起来像这样
Operations
|
?
Binops
| |
| |
+---+ +---+
? ?
Addition Subtraction
Run Code Online (Sandbox Code Playgroud)
这Binops是朋友班Operations.需要以下成员函数:Operations实现私有函数
void add(Operations const &rhs);
void sub(Operations const &rhs);
Run Code Online (Sandbox Code Playgroud)
而且这个课Addition需要实施
Addition::operator+=(Operations const &rhs)
Run Code Online (Sandbox Code Playgroud)
同样的Subtraction课程.
我对这个设计的实现以及它背后的想法都有疑问.
我看到它的样子,一旦这一框架已经准备好,例如像其他类Matrix类可以从继承Operations类,然后我们做Matrix的一个朋友Operations这样Matrix可以使用+=等等.然后,我们也只会实现add在功能Operations和+=操作将然后为Matrix全班工作.但后来我们为什么不干脆直接在+=运营商Operations,甚至Matrix …
我一直在编写一些采用名为 的模板的函数It,该模板应该是一个迭代器。然后我使用It::value_type来实现某些功能。这对于我尝试过的大多数容器都有效,但对于std::array. 如果我确实使用了,std::array我会收到错误
error: \xe2\x80\x98long unsigned int*\xe2\x80\x99 is not a class, struct, or union type\nRun Code Online (Sandbox Code Playgroud)\n所以我看到了问题, 的迭代器std::array只是一个指针,这对我来说是有意义的。因此它没有::value_type定义。但是我怎样才能制作我的模板化代码,以便它适用于std::array和std::vector等std::list?
我做了一个 MWE,其中的函数只是一个愚蠢的病态例子,显示了我的问题
\n#include <vector>\n#include <iostream>\n#include <array>\n\ntemplate <class It>\nvoid print_accumulate(It first, It last) {\n typename It::value_type result{}; // What do I write here??\n while (first != last) {\n result += *first;\n ++first;\n }\n std::cout << result << "\\n";\n}\n\nint main() {\n std::vector<size_t> v …Run Code Online (Sandbox Code Playgroud) 我正在尝试boost::asio::thread_pool在我的应用程序中创建线程池。我创建了以下玩具示例,看看我是否理解它是如何工作的,但显然不明白:)
#include <boost/asio/post.hpp>
#include <boost/asio/thread_pool.hpp>
#include <boost/bind.hpp>
#include <iostream>
boost::asio::thread_pool g_pool(10);
void f(int i) {
std::cout << i << "\n";
}
int main() {
for (size_t i = 0; i != 50; ++i) {
boost::asio::post(g_pool, boost::bind(f, 10 * i));
g_pool.join();
}
}
Run Code Online (Sandbox Code Playgroud)
程序输出
0
Run Code Online (Sandbox Code Playgroud)
我对两件事感到困惑:第一,如果我正在等待线程完成使用g_pool.join(),为什么我不能在下一次迭代中重用这些线程。10,20,30,...即,我希望还能看到在后续迭代中打印的数字等。
其次,我正在创建一个大小为 10 的线程池,为什么我至少没有看到 10 个输出呢?我无法理解这个问题。
请告诉我哪里出错了,先谢谢了!
我编写了以下函数来判断数字是否为素数.
isPrime :: Int -> Bool
isPrime n = and (map (\x -> (n `mod` x > 0))[2..(intSquareRoot n)])
intSquareRoot :: Int -> Int
intSquareRoot n = intSq n
where
intSq x
| x*x > n = intSq (x - 1)
| otherwise = x
Run Code Online (Sandbox Code Playgroud)
我刚刚开始使用Haskell,所以这段代码可能对任何受过使用训练的人都是可怕的.但是,我很好奇这段代码是否使用了Haskell的懒惰评估.这部分
(map (\x -> (n `mod` x > 0))[2..(intSquareRoot n)])
Run Code Online (Sandbox Code Playgroud)
将创建一个布尔列表,如果只有其中一个是假的(所以如果一个介于2和n的sqrt之间的数字除以n)那么使用'和'函数整个事件是假的.但我认为将首先创建整个列表,然后使用'和'函数.这是真的?如果是这样,我怎样才能通过使用延迟求值来加快速度,以便函数停止并在找到n的第一个除数后返回false.在此先感谢您的帮助!
我在Haskell中实现了Miller Rabin测试.我试图严格遵循例如在Miller Rabin测试的维基百科条目中给出的伪代码.现在我在网上发现,对于某些证人的选择,测试是确定性的,直到某些给定的界限.我对2 ^ 64以下的素数很感兴趣,所以我在这篇文章中找到了足够的界限 我需要哪些证人才能进行Rabin-Miller测试,最多可达10?.但是,代码似乎适用于我测试过的大多数小素数,但是对于一些较大的素数而言却失败了.例如,我尝试了十位数的素数5915587277,测试返回false.我认为我的实施是正确的,但希望有人可以发现我犯了错误并且误解了MR测试.在此先感谢您的帮助.此外,抱歉看起来凌乱的代码.
isPrime :: Int -> Bool
isPrime n = millerRabinTest n (factorizeN (n-1))
{- factorizeN finds a number s and odd number d such that n -1 = (2^s)d by
succesively dividing n by two if it is even. -}
factorizeN :: Int -> (Int, Int)
factorizeN n = fN n 0
where
fN n s | even n = fN (n `div` 2) (s + 1)
| otherwise = (n,s)
{- this is …Run Code Online (Sandbox Code Playgroud) 我知道我可以创建一个函数来执行此操作,但我可以使用前奏中的过滤器函数.我可以轻松过滤所有大于3的数字,例如从列表中使用
filter (>3) [list]
Run Code Online (Sandbox Code Playgroud)
但我想要类似的东西
filter (not (.. `mod` 4 == 0)) [list]
Run Code Online (Sandbox Code Playgroud)
过滤掉所有四倍的倍数.我把..放在这里,因为我不知道那里有什么.有什么方法可以使用过滤器功能这样做,还是我应该自己做功能呢?提前致谢
我正在为我的一门课程制作一个并行程序。现在最初它是用 C 编写的,并且一切正常。然后我们将其全部更改为 C++,当我尝试编译该程序时,突然间出现了一些错误。我在并行部分使用包 mcbsp(多核 BSP)。这是程序
#include <stdio.h>
#include <stdlib.h>
#include <mcbsp.h>
void sieve(){
return ;
}
main(int argc, int **arhv){
bsp_begin(5);
printf("%d\n",bsp_pid());
bsp_end();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
所以我用这个内容制作了一个文件 aaa.c 和 aaa.cpp 。然后当我在终端中输入时
gcc aaa.c -MMD -g -I../bsp/include -L../bsp/lib -lmcbsp1.2.0 -lpthread
Run Code Online (Sandbox Code Playgroud)
它编译得很好,程序按预期运行(打印内核的 id)。但是,当我输入
g++ aaa.cpp -MMD -g -I../bsp/include -L../bsp/lib -lmcbsp1.2.0 -lpthread
Run Code Online (Sandbox Code Playgroud)
它给出了以下反馈
/tmp/ccH3uox9.o: In function `main':
/home/teun/Documents/C/BSP/Sieve/sieve/aaa.cpp:10: undefined reference to `bsp_begin(unsigned int)'
/home/teun/Documents/C/BSP/Sieve/sieve/aaa.cpp:11: undefined reference to `bsp_pid()'
/home/teun/Documents/C/BSP/Sieve/sieve/aaa.cpp:12: undefined reference to `bsp_end()'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
我已经坚持了大约一个小时,这真的很令人沮丧。我必须承认,我几乎没有使用 C++ …
我制作了一个程序来计算mandelbrot集中的点.对于不属于mandelbrot集的点,我会跟踪起始点发散多少次迭代到幅度大于2的位置.基本上对于不在mandelbrot集中的每个点,我都有一个计数器,它的速度有多快在1到256的范围内发散.想要做的就是根据它的发散速度给每个点一个颜色.例如,在255次迭代中发散的点可以是白色,并且它发散的越快,它被着色的越多.我已经做了一个简单的调整,其中在20多个步骤中发散的发散点被涂成红色,在10-19步中发散的发散点是蓝色的,而在5-9步中发散的发散点是黄色的,它看起来像这样.

现在我不能为所有可能的255分歧率做到这一点.如何制作一个毕业比例并在Matlab中实现它.在此先感谢您的帮助.如果有人想知道更多,请询问.谢谢!
编辑我很抱歉,但图像似乎不起作用.基本上我需要它.我正在绘制点,每个点分配1到255之间的值,我希望颜色根据分配给它的值逐渐改变.谢谢!
这是问题所在.有N个人,其中一个是国王.每个人都认识国王,而国王却不认识任何人.是否有一个名称或一些理论如何最好地找出国王的数量是这种情况,因为我们有一个功能,以确定我是否知道人j.当然,我们可以简单地为每个人检查哪些人不认识任何人,然后检查每个人都知道哪一个.但这是订单N ^ 2,如果有更快的东西,我很好奇.提前致谢
考虑以下程序.
#include <iostream>
#include <vector>
void printEm(std::vector<size_t>* array){
std::cout << array[0] << "\n";
}
int main(){
std::vector<size_t> array;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,每当我编译这个,我得到三页值或错误,我不知道为什么.我认为类型std :: vector可能与cout的期望值不匹配.有谁知道如何解决这一问题?我会发布错误消息,但它们真的会永远存在.谢谢!
我正在尝试解决topcoder上发现的旧问题.我立刻陷入了试图找到字符串数组中的元素数量.这是我的代码
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
using namespace std;
class MiniPaint {
private:
size_t numLines;
public:
int leastBad(string picture[], int maxStrokes) {
numLines = 0;
while (!picture[numLines].empty()) {
numLines++;
}
cout << numLines << '\n';
return 0;
}
};
int main() {
MiniPaint instance;
string picture[] = {"BBBBBBBBBBBBBBB", "WWWWWWWWWWWWWWW", "WWWWWWWWWWWWWWW", "WWWWWBBBBBWWWWW"};
instance.leastBad(picture, 10);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这段代码给了我一个分段错误.出现问题,代码有点过分,只是计算元素数量的功能,但当然我想扩展类以包含更多功能.如果有人能解释这里出了什么问题,我将不胜感激!提前致谢.
编辑:当我扩展代码时
cout << picture[numlines] << '\n';
Run Code Online (Sandbox Code Playgroud)
在while循环中,为了显示数组中的实际元素,首先显示四个正确的字符串然后以某种方式无限地向终端打印空格.所以问题在于某个事实
picture[4].empty()
Run Code Online (Sandbox Code Playgroud)
即使图片只有四个元素,也不会返回true.
c++ ×7
haskell ×3
algorithm ×2
arrays ×1
boost ×1
boost-asio ×1
inheritance ×1
mandelbrot ×1
matlab ×1
oop ×1
pointfree ×1
primes ×1
string ×1
templates ×1
threadpool ×1