我们如何在c ++中的类构造函数中初始化std :: vector?
class MyClass
{
public:
MyClass( int p_Var1, int* p_Vector ) : Var1( p_Var1 ) //, Initialize std::vector - MyVector with p_Vector
{
};
~MyClass( void );
private:
int Var1;
std::vector< int > MyVector;
};
Run Code Online (Sandbox Code Playgroud) 我有一个小问题,在LARGE unsigned char数组中扫描某些元素的最快方法是什么,以及只包含unsigned char元素的向量?直接答案会很棒,但深入详细的答案会很棒.快速是什么意思?基本上,要在至少一秒内搜索某些字符.我知道这不是一个受过良好教育的定义......
注意:数组未排序.
共同宣言:
unsigned char* Array = new unsigned char[ 50000 ];
std::vector< unsigned char > Vec( 50000 );
/*
* Fill Array & Vec with random bytes
*/
Run Code Online (Sandbox Code Playgroud)
可以说,我想在Array中搜索字母'a',我只想编写这个循环来搜索它:
注意:搜索过程将搜索多个元素.主要是256.因此,你可以利用这个神奇的数字.
对于循环方法:
unsigned int Count = 0;
for ( unsigned int Index = 0; Index != 50000; ++ Index )
if( Array[ Index ] == 'a' ) Count ++;
Run Code Online (Sandbox Code Playgroud)
std :: count方法:
unsigned int Count = std::count ( Array, Array + 50000, 'a' );
Run Code Online (Sandbox Code Playgroud)
有没有更快的方法来搜索Array中的某些元素?
一些想法 - …
第一个问题,是否std::string::erase重新分配?
第二个问题,有没有更快的方法来快速删除某些单词或短语std::string?字符串的长度通常在300K左右。
来源:
//$ DO DECLARATION
#define VEC_MAX_SIZE 600000
mpz_t Vec[ VEC_MAX_SIZE ];
//$ DO INITIALIZATION
mpz_array_init( Vec[ 0 ], VEC_MAX_SIZE, 2000 ); // Stack overflow error - 3rd param
Run Code Online (Sandbox Code Playgroud)
问题:
问题是我不知道如何正确初始化 mpz_t 数组,在本例中是 Vec。错误是堆栈溢出。我认为这是由第三个参数引起的。这是 mpz_array_init 的原型/定义:
#define mpz_array_init __gmpz_array_init
__GMP_DECLSPEC void mpz_array_init __GMP_PROTO ((mpz_ptr, mp_size_t, mp_size_t));
Run Code Online (Sandbox Code Playgroud)
错误:
Unhandled exception at 0x008e8377 in TestMPIR.exe: 0xC00000FD: Stack overflow.
Run Code Online (Sandbox Code Playgroud)
笔记:
我在 Windows 7 64 位上使用 mpir 3.1.1。
mpir 示例中的这个效果很好:
mpz_t Vec[ 20000 ];
mpz_array_init( Vec[ 0 ], 20000, 512 );
Run Code Online (Sandbox Code Playgroud)
回答:
感谢@Zeta 的出色回答。如果我错了请纠正我。我只是想把这个贴在这里,以便其他新手可以学习。
#define …Run Code Online (Sandbox Code Playgroud) 我相信Array1和Array2的声明方式不同,但它们都具有相同的类型 - char.Array1和Array2似乎都包含相同的精确值和相同数量的值.我不明白为什么他们的长度彼此不同.有人可以解释一下原因吗?
char Array1[ ] = { 1, 2, 3, 4, 5 };
char Array2[ ] = "\x01\x02\x03\x04\x05";
std::cout << "Length of Array1 = " << sizeof( Array1 )/sizeof( *Array1 )
<< std::endl
<< "Length of Array2 = " << sizeof( Array2 )/sizeof( *Array2 );
Run Code Online (Sandbox Code Playgroud)
输出:
Length of Array1 = 5
Length of Array2 = 6
Run Code Online (Sandbox Code Playgroud) struct OBJECT
{
unsigned int Var1;
std::string Str1;
...
bool YesNo;
};
OBJECT Obj[ 327 ];
Run Code Online (Sandbox Code Playgroud)
我对如何将Obj归零感到困惑.它有几种不同类型的元素.我必须将其所有成员设置为0吗?喜欢...... Obj[0].Str = "";
?所以问题是,这样做的正确方法是什么?
我的尝试:
::memset( &Obj, 0, sizeof( Obj ) );
Run Code Online (Sandbox Code Playgroud)
我不确定我是否正确地做到了......
哦,有没有更快的方法将数组清零?