Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C++;这包含GMP变量吗?_C++_Gmp - Fatal编程技术网

C++ 如何在C++;这包含GMP变量吗?

C++ 如何在C++;这包含GMP变量吗?,c++,gmp,C++,Gmp,我正在尝试使用: int array_size = 5; mpz_t numerator_arr; for (i = 0; i < array_size; i++) { mpz_init2(numerator_arr[i], 100); } numerator_arr = { 1, -1, 1, 5, -691 }; 编辑**:在进一步挖掘之后,我发现我需要用 mpz_t *numerator_arr = new mpz_t[array_size]; 但编译器仍在返回错误: t

我正在尝试使用:

int array_size = 5;
mpz_t numerator_arr;
for (i = 0; i < array_size; i++) {
    mpz_init2(numerator_arr[i], 100);
}
numerator_arr = { 1, -1, 1, 5, -691 };
编辑**:在进一步挖掘之后,我发现我需要用

mpz_t *numerator_arr = new mpz_t[array_size];
但编译器仍在返回错误:

test.cpp:17:38: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]
  numerator_arr = { 1, -1, 1, 5, -691 };
                                      ^
test.cpp:17:16: error: cannot convert ‘<brace-enclosed initializer list>’ to ‘__mpz_struct (*)[1]’ in assignment
  numerator_arr = { 1, -1, 1, 5, -691 };
                ^
test.cpp:12:60: error: in C++98 ‘numerator_arr’ must be initialized by constructor, not by ‘{...}’
  vector<mpz_class> numerator_arr{ 1, -1, 1, -1, 5, -691, 7 };
                                                            ^
test.cpp:12:60: error: no matching function for call to ‘std::vector<__gmp_expr<__mpz_struct [1], __mpz_struct [1]> >::vector(<brace-enclosed initializer list>)’
test.cpp:12:60: note: candidates are:
In file included from /usr/lib/gcc/x86_64-pc-cygwin/4.8.3/include/c++/vector:64:0,
                 from test.cpp:2:
/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/include/c++/bits/stl_vector.h:398:9: note: template<class _InputIterator> std::vector<_Tp, _Alloc>::vector(_InputIterator, _InputIterator, const allocator_type&)
         vector(_InputIterator __first, _InputIterator __last,
         ^
/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/include/c++/bits/stl_vector.h:398:9: note:   template argument deduction/substitution failed:
test.cpp:12:60: note:   cannot convert ‘1’ (type ‘int’) to type ‘const allocator_type& {aka const std::allocator<__gmp_expr<__mpz_struct [1], __mpz_struct [1]> >&}’
  vector<mpz_class> numerator_arr{ 1, -1, 1, -1, 5, -691, 7 };
                                                            ^
我试着像这样存储数字

-94598037819122125295227433069493721872702841533066936133385696204311395415197247711
编译器将返回以下警告和错误:

test.cpp:29:3: warning: this decimal constant is unsigned only in ISO C90 [enabled by default]
test.cpp:30:4: warning: integer constant is too large for its type [enabled by default]
   -94598037819122125295227433069493721872702841533066936133385696204311395415197247711 };
    ^
test.cpp: In function ‘int main()’:
test.cpp:30:88: error: conversion from ‘__int128 unsigned’ to ‘mpz_class {aka __gmp_expr<__mpz_struct [1], __mpz_struct [1]>}’ is ambiguous
   -94598037819122125295227433069493721872702841533066936133385696204311395415197247711 };
                                                                                        ^
test.cpp:30:88: note: candidates are:
In file included from test.cpp:2:0:
/usr/include/gmpxx.h:1423:3: note: __gmp_expr<__mpz_struct [1], __mpz_struct [1]>::__gmp_expr(double)
   __GMPXX_DEFINE_ARITHMETIC_CONSTRUCTORS
   ^
/usr/include/gmpxx.h:1423:3: note: __gmp_expr<__mpz_struct [1], __mpz_struct [1]>::__gmp_expr(float)
   __GMPXX_DEFINE_ARITHMETIC_CONSTRUCTORS
   ^
/usr/include/gmpxx.h:1423:3: note: __gmp_expr<__mpz_struct [1], __mpz_struct [1]>::__gmp_expr(long unsigned int)
   __GMPXX_DEFINE_ARITHMETIC_CONSTRUCTORS
   ^
/usr/include/gmpxx.h:1423:3: note: __gmp_expr<__mpz_struct [1], __mpz_struct [1]>::__gmp_expr(long int)
   __GMPXX_DEFINE_ARITHMETIC_CONSTRUCTORS
   ^
/usr/include/gmpxx.h:1423:3: note: __gmp_expr<__mpz_struct [1], __mpz_struct [1]>::__gmp_expr(short unsigned int)
   __GMPXX_DEFINE_ARITHMETIC_CONSTRUCTORS
   ^
/usr/include/gmpxx.h:1423:3: note: __gmp_expr<__mpz_struct [1], __mpz_struct [1]>::__gmp_expr(short int)
   __GMPXX_DEFINE_ARITHMETIC_CONSTRUCTORS
   ^
/usr/include/gmpxx.h:1423:3: note: __gmp_expr<__mpz_struct [1], __mpz_struct [1]>::__gmp_expr(unsigned int)
   __GMPXX_DEFINE_ARITHMETIC_CONSTRUCTORS
   ^
/usr/include/gmpxx.h:1423:3: note: __gmp_expr<__mpz_struct [1], __mpz_struct [1]>::__gmp_expr(int)
   __GMPXX_DEFINE_ARITHMETIC_CONSTRUCTORS
   ^
/usr/include/gmpxx.h:1423:3: note: __gmp_expr<__mpz_struct [1], __mpz_struct [1]>::__gmp_expr(unsigned char)
   __GMPXX_DEFINE_ARITHMETIC_CONSTRUCTORS
   ^
/usr/include/gmpxx.h:1423:3: note: __gmp_expr<__mpz_struct [1], __mpz_struct [1]>::__gmp_expr(signed char)
   __GMPXX_DEFINE_ARITHMETIC_CONSTRUCTORS
   ^
test.cpp:29:3:警告:此十进制常量仅在ISO C90中无符号[默认启用]
test.cpp:30:4:警告:整数常量对于其类型而言太大[默认情况下已启用]
-94598037819122125295227433069493721872702841533066936133385696204311395415197247711 };
^
test.cpp:在函数“int main()”中:
test.cpp:30:88:错误:从“uu int128 unsigned”到“mpz_class{aka uuu gmp_expr}”的转换不明确
-94598037819122125295227433069493721872702841533066936133385696204311395415197247711 };
^
考试。cpp:30:88:注:考生为:
在test.cpp中包含的文件中:2:0:
/usr/include/gmpxx.h:1423:3:注:_gmp_expr::_gmp_expr(双倍)
__GMPXX_定义_算术_构造函数
^
/usr/include/gmpxx.h:1423:3:注:_gmp_expr::_gmp_expr(浮动)
__GMPXX_定义_算术_构造函数
^
/usr/include/gmpxx.h:1423:3:注:_gmp_expr::_gmp_expr(长无符号整数)
__GMPXX_定义_算术_构造函数
^
/usr/include/gmpxx.h:1423:3:注:_gmp_expr::_gmp_expr(长整型)
__GMPXX_定义_算术_构造函数
^
/usr/include/gmpxx.h:1423:3:注:_gmp_expr::_gmp_expr(短无符号整数)
__GMPXX_定义_算术_构造函数
^
/usr/include/gmpxx.h:1423:3:注:_gmp_expr::_gmp_expr(短int)
__GMPXX_定义_算术_构造函数
^
/usr/include/gmpxx.h:1423:3:注:_gmp_expr::_gmp_expr(未签名整数)
__GMPXX_定义_算术_构造函数
^
/usr/include/gmpxx.h:1423:3:注:_gmp_expr::_gmp_expr(int)
__GMPXX_定义_算术_构造函数
^
/usr/include/gmpxx.h:1423:3:注:_gmp_expr::_gmp_expr(未签名字符)
__GMPXX_定义_算术_构造函数
^
/usr/include/gmpxx.h:1423:3:注:_gmp_expr::_gmp_expr(签名字符)
__GMPXX_定义_算术_构造函数
^

这是我第一次在GMP中使用阵列。任何帮助都将不胜感激。

好吧,总结以上所有评论,如果您在代码中处理大量数组修改(插入/删除),最好使用
vector
保存mpz_类变量。 使用
mpz_class
而不是
mpz_t
更好的原因是,首先,您不必担心跟踪变量所使用的内存(
mpz_init()/mpz_clear()
),其次,由于许多操作符都映射到
mpz_class
),您编写的代码变得更加清晰

关于错误,您的
向量
代码是导致错误的原因,因为您没有正确地实例化变量。也许是你的意思

mpz_class numerator_arr[] = { 1, -1, 1, -1 };
vector<mpz_class> arr (numerator_arr);
您已经在将大量的数字初始化为基本的int类型。在您的例子中,这个数字被分配为一个无符号的16字节int,因为它太大了,而且gmp没有提供任何构造函数使它成为它的
mpz_类
结构。 您最好将输入参数设置为字符串(constchar*),而不是int

mpz_class m("-11111111111111111111111111111111111111111111111")

希望这有帮助。

分子_arr={1,-1,1,5,-691}分子arr
时才允许使用code>编辑之前,您是否阅读了rupesh.yadav的评论?不要分配。初始化!为什么不使用std::vector?@我相信我正在用for循环初始化rupesh.yadav和harper。@Blacktempel我需要mpz,因为这些数字会非常大。我所写的只是我拥有的数字的一个小样本。你最好用C++接口来GMP。如果我正确阅读文档,您可以编写
std::vector momerator_arr{1,-1,1,5,-691}
test.cpp:29:3: warning: this decimal constant is unsigned only in ISO C90 [enabled by default]
test.cpp:30:4: warning: integer constant is too large for its type [enabled by default]
   -94598037819122125295227433069493721872702841533066936133385696204311395415197247711 };
    ^
test.cpp: In function ‘int main()’:
test.cpp:30:88: error: conversion from ‘__int128 unsigned’ to ‘mpz_class {aka __gmp_expr<__mpz_struct [1], __mpz_struct [1]>}’ is ambiguous
   -94598037819122125295227433069493721872702841533066936133385696204311395415197247711 };
                                                                                        ^
test.cpp:30:88: note: candidates are:
In file included from test.cpp:2:0:
/usr/include/gmpxx.h:1423:3: note: __gmp_expr<__mpz_struct [1], __mpz_struct [1]>::__gmp_expr(double)
   __GMPXX_DEFINE_ARITHMETIC_CONSTRUCTORS
   ^
/usr/include/gmpxx.h:1423:3: note: __gmp_expr<__mpz_struct [1], __mpz_struct [1]>::__gmp_expr(float)
   __GMPXX_DEFINE_ARITHMETIC_CONSTRUCTORS
   ^
/usr/include/gmpxx.h:1423:3: note: __gmp_expr<__mpz_struct [1], __mpz_struct [1]>::__gmp_expr(long unsigned int)
   __GMPXX_DEFINE_ARITHMETIC_CONSTRUCTORS
   ^
/usr/include/gmpxx.h:1423:3: note: __gmp_expr<__mpz_struct [1], __mpz_struct [1]>::__gmp_expr(long int)
   __GMPXX_DEFINE_ARITHMETIC_CONSTRUCTORS
   ^
/usr/include/gmpxx.h:1423:3: note: __gmp_expr<__mpz_struct [1], __mpz_struct [1]>::__gmp_expr(short unsigned int)
   __GMPXX_DEFINE_ARITHMETIC_CONSTRUCTORS
   ^
/usr/include/gmpxx.h:1423:3: note: __gmp_expr<__mpz_struct [1], __mpz_struct [1]>::__gmp_expr(short int)
   __GMPXX_DEFINE_ARITHMETIC_CONSTRUCTORS
   ^
/usr/include/gmpxx.h:1423:3: note: __gmp_expr<__mpz_struct [1], __mpz_struct [1]>::__gmp_expr(unsigned int)
   __GMPXX_DEFINE_ARITHMETIC_CONSTRUCTORS
   ^
/usr/include/gmpxx.h:1423:3: note: __gmp_expr<__mpz_struct [1], __mpz_struct [1]>::__gmp_expr(int)
   __GMPXX_DEFINE_ARITHMETIC_CONSTRUCTORS
   ^
/usr/include/gmpxx.h:1423:3: note: __gmp_expr<__mpz_struct [1], __mpz_struct [1]>::__gmp_expr(unsigned char)
   __GMPXX_DEFINE_ARITHMETIC_CONSTRUCTORS
   ^
/usr/include/gmpxx.h:1423:3: note: __gmp_expr<__mpz_struct [1], __mpz_struct [1]>::__gmp_expr(signed char)
   __GMPXX_DEFINE_ARITHMETIC_CONSTRUCTORS
   ^
mpz_class numerator_arr[] = { 1, -1, 1, -1 };
vector<mpz_class> arr (numerator_arr);
mpz_class m(-11111111111111111111111111111111111111111111111)
mpz_class m("-11111111111111111111111111111111111111111111111")