在编程练习中,我需要找出一个非常大的数的模数,例如2加到500000(输入的最大数),1000000007作为其他计算的一部分.
因为我可能需要多次发现,一种方法是创建一个5,00,000的数组.但它会阻塞大量的内存,所以我想知道有没有更好的方法来做到这一点?
我处于可能有机会向一些学生教授C的情况.大学希望教他们纯c而不是c ++,以保持高级c ++课程的独立性.
由于c ++是从c派生的,是否有一个官方的"c规则",其中包含c的所有功能,但没有c ++功能?我想知道的原因是我可以查看我需要教给学生的东西.
我曾经看过c ++标准的(2000页?)手册.即使现在是20/30岁,c也存在这样的事情吗?
此致,Ed
编辑:我应该指出,我已经很好地了解了C/C++ 3年.我唯一不知道的是"正式"C是什么,什么是"正式"C++.这是我的目标,所以我可以给其他学生一个比我自己更好的教育.
编译器升级后,我遇到了新的警告消息。
警告:整数为零的指针的有序比较[-Wextra]
Run Code Online (Sandbox Code Playgroud)if (inx > 0)
事实证明inx是一个指针。通常,我希望看到这个旧代码与0或NULL进行比较。这使我考虑了有符号和无符号的值以及可能的风险。
一些研究表明:
这些似乎表明一个地址(由malloc返回)永远不能为零。
这将我带到了标准的旧版本。
4.10指针转换
1空指针常量是整数类型的整数常量表达式(5.19)prvalue,其值为零或std :: nullptr_t类型的prvalue。空指针常量可以转换为指针类型。结果是该类型的空指针值,并且可以与指向对象或函数类型的指针的所有其他值区分开。这种转换称为空指针转换。相同类型的两个空指针值应比较相等。空指针常量到cv限定类型的指针的转换是一次转换,而不是指针转换后跟有资格转换的序列(4.4)。整数类型的空指针常量可以转换为std :: nullptr_t类型的prvalue。
它特别指出两个空指针比较相等。
考虑到这一点,那小段代码是未定义的行为吗?还是我想念的难题还有另外一块?
我是编程的初学者,正在尝试一些组合.
#include<stdio.h>
int main()
{
int a=5;
printf("%d",&a); // STATEMENT 1
printf("\n%d",a); //STATEMENT 2
printf("\n%d",&(a++)); //STATEMENT 3
printf("\n%d",a); //STATEMENT 4
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我在STATEMENT 3中说错了
[错误]左值作为一元'&'操作数需要
我期望STATEMENT 1和3的输出相同,因为两个地址都是相同的.
我还期望STATEMENT 2的输出为5&STATEMENT 4为6.
我抬起头,发现了一个类似的问题:Lvalue需要错误
我在那个问题上理解了这个问题.从评论到上面提到的问题的第一个答案,我认为左值是可以存储某些东西的东西.
但我仍然无法理解为什么&(a ++)或&(++ a)应该给出错误.任何帮助将不胜感激.
谢谢您阅读此篇.
[编辑]感谢您的回答.如果可能的话,请包括参考,其中讨论了这些表达的确切执行顺序或性质.这样,像我这样的新手不会因为这些微不足道的问题而困扰社区.
右侧总是会在左侧前方进行评估吗?然后右侧的结果将传递到左侧.我不是在谈论诸如此类的例外A[i]=i++
我说的是正常情况:
A[i] = (j+32+43 & K);
A[j] != (A[j] + A[k]);
Run Code Online (Sandbox Code Playgroud)
将所有这些表达式的正确部分首先评估,然后将结果与左侧进行比较?(总是)
我在不同的机器和不同的编译器上测试了这个,但我给出了相同的输出:
int sum = 10, i = 5;
printf("%d", sum+++i);
Run Code Online (Sandbox Code Playgroud)
这是C中定义明确或未定义的行为吗?
是否有任何C++标准保证STL迭代器可以存储在一个联合中?如果是这样,哪个标准?
例如:
union MyUnion {
std::vector<int>::iterator iter;
size_t size;
};
Run Code Online (Sandbox Code Playgroud)
我问的原因是我正在移植其他人在代码中存储std::vector和std::map迭代的代码,而MSVC2013似乎并不喜欢它.我收到错误C2621:非法工会成员; type ...有一个复制构造函数.我想确定这是代码中的错误,MS STL实现中的错误,还是编译器中的错误.
非常感谢!
我尝试使用 pybind11 绑定静态重载函数,但遇到了一些问题。
\n\n这是示例代码
\n\n#include <pybind11/pybind11.h>\n\nnamespace py = pybind11;\n\nclass TESTDB {\n public:\n static void aaaa(int a, int b) {printf("aaaaa");};\n static void aaaa(int a) {printf("xxxxx");};\n};\n\nPYBIND11_MODULE(example, m) {\n\n\n py::class_<TESTDB>(m, "db")\n .def_static("aaaa", (void (TESTDB::*)(int, int)) &TESTDB::aaaa);\n\n}\nRun Code Online (Sandbox Code Playgroud)\n\n但由于以下原因无法编译
\n\nerror: no matches converting function \xe2\x80\x98aaaa\xe2\x80\x99 to type \xe2\x80\x98void (class TESTDB::*)(int, int)\xe2\x80\x99\n .def_static("aaaa", (void (TESTDB::*)(int, int)) &TESTDB::aaaa);\n note: candidates are: static void TESTDB::aaaa(int)\n static void aaaa(int a) {printf("xxxxx");};\n note: static void TESTDB::aaaa(int, int)\n static void aaaa(int a, int b) {printf("aaaaa");};\nRun Code Online (Sandbox Code Playgroud)\n\n任何想法? …
当迭代器被引入 ISO C++ 时,我正在寻找参考,我可以注意到在这个例子中它们自 C++98 以来与向量一起使用,但我从www.isocpp.com页面读到这不是官方文档但只是参考:http : //www.cplusplus.com/reference/vector/vector/vector/
// constructing vectors
#include <iostream>
#include <vector>
int main ()
{
// constructors used in the same order as described above:
std::vector<int> first; // empty vector of ints
std::vector<int> second (4,100); // four ints with value 100
std::vector<int> third (second.begin(),second.end()); // iterating through second
std::vector<int> fourth (third); // a copy of third
// the iterator constructor can also be used to construct from arrays:
int myints[] = {16,2,77,29};
std::vector<int> …Run Code Online (Sandbox Code Playgroud)