相关疑难解决方法(0)

查找具有非常大数的两个非常大的数的乘法模数

在编程练习中,我需要找出一个非常大的数的模数,例如2加到500000(输入的最大数),1000000007作为其他计算的一部分.

因为我可能需要多次发现,一种方法是创建一个5,00,000的数组.但它会阻塞大量的内存,所以我想知道有没有更好的方法来做到这一点?

c algorithm data-structures

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

我在哪里可以找到C规范?

我处于可能有机会向一些学生教授C的情况.大学希望教他们纯c而不是c ++,以保持高级c ++课程的独立性.

由于c ++是从c派生的,是否有一个官方的"c规则",其中包含c的所有功能,但没有c ++功能?我想知道的原因是我可以查看我需要教给学生的东西.

我曾经看过c ++标准的(2000页?)手册.即使现在是20/30岁,c也存在这样的事情吗?

此致,Ed

编辑:我应该指出,我已经很好地了解了C/C++ 3年.我唯一不知道的是"正式"C是什么,什么是"正式"C++.这是我的目标,所以我可以给其他学生一个比我自己更好的教育.

c standards

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

无效* p ...; if(p> 0)....这是未定义的行为吗?

编译器升级后,我遇到了新的警告消息。

警告:整数为零的指针的有序比较[-Wextra]

    if (inx > 0)
Run Code Online (Sandbox Code Playgroud)

事实证明inx是一个指针。通常,我希望看到这个旧代码与0或NULL进行比较。这使我考虑了有符号和无符号的值以及可能的风险。

一些研究表明:

这些似乎表明一个地址(由malloc返回)永远不能为零。

这将我带到了标准的旧版本。

4.10指针转换

1空指针常量是整数类型的整数常量表达式(5.19)prvalue,其值为零或std :: nullptr_t类型的prvalue。空指针常量可以转换为指针类型。结果是该类型的空指针值,并且可以与指向对象或函数类型的指针的所有其他值区分开。这种转换称为空指针转换。相同类型的两个空指针值应比较相等。空指针常量到cv限定类型的指针的转换是一次转换,而不是指针转换后跟有资格转换的序列(4.4)。整数类型的空指针常量可以转换为std :: nullptr_t类型的prvalue。

它特别指出两个空指针比较相等。

考虑到这一点,那小段代码是未定义的行为吗?还是我想念的难题还有另外一块?

c++ pointers

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

无法理解错误条件和左值

我是编程的初学者,正在尝试一些组合.

#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)应该给出错误.任何帮助将不胜感激.

谢谢您阅读此篇.

[编辑]感谢您的回答.如果可能的话,请包括参考,其中讨论了这些表达的确切执行顺序或性质.这样,像我这样的新手不会因为这些微不足道的问题而困扰社区.

c compiler-errors lvalue

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

哪里是找到C++ 14标准最新草案的最佳位置

互联网上有很多草稿.哪个是C++ 14标准的最新草案,我在哪里可以下载?

c++ c++11 c++14

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

将首先评估表达式的右侧

右侧总是会在左侧前方进行评估吗?然后右侧的结果将传递到左侧.我不是在谈论诸如此类的例外A[i]=i++

我说的是正常情况:

A[i] = (j+32+43 & K); 
A[j] != (A[j] + A[k]); 
Run Code Online (Sandbox Code Playgroud)

将所有这些表达式的正确部分首先评估,然后将结果与左侧进行比较?(总是)

c operator-precedence language-lawyer

2
推荐指数
2
解决办法
1756
查看次数

总和+++我在C中的未定义行为?

我在不同的机器和不同的编译器上测试了这个,但我给出了相同的输出:

int sum = 10, i = 5;
printf("%d", sum+++i);
Run Code Online (Sandbox Code Playgroud)

这是C中定义明确或未定义的行为吗?

c undefined-behavior language-lawyer

2
推荐指数
2
解决办法
245
查看次数

在工会中存储STL迭代器是否合法?

是否有任何C++标准保证STL迭代器可以存储在一个联合中?如果是这样,哪个标准?

例如:

union MyUnion {
   std::vector<int>::iterator iter;
   size_t size;
};
Run Code Online (Sandbox Code Playgroud)

我问的原因是我正在移植其他人在代码中存储std::vectorstd::map迭代的代码,而MSVC2013似乎并不喜欢它.我收到错误C2621:非法工会成员; type ...有一个复制构造函数.我想确定这是代码中的错误,MS STL实现中的错误,还是编译器中的错误.

非常感谢!

c++ stl unions

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

无法在 pybind11 中绑定重载的静态成员函数

我尝试使用 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}\n
Run Code Online (Sandbox Code Playgroud)\n\n

但由于以下原因无法编译

\n\n
error: 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");};\n
Run Code Online (Sandbox Code Playgroud)\n\n

任何想法? …

c++ python function-pointers pointer-to-member pybind11

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

在哪个 ISO C++ 版本中引入了迭代器?

当迭代器被引入 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)

c++

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