相关疑难解决方法(0)

如何将数组的所有成员初始化为相同的值?

我在C中有一个大数组(如果有所不同,则不是C++).我想将所有成员初始化为相同的值.我发誓我曾经知道一个简单的方法来做到这一点.我可以memset()在我的情况下使用,但是没有办法在C语法中构建这样做吗?

c arrays array-initialize initialization

934
推荐指数
13
解决办法
179万
查看次数

如何用C++中的new运算符初始化内存?

我刚刚开始进入C++,我想养成一些好习惯.如果我刚刚int使用new运算符分配了一个类型的数组,我怎么能将它们全部初始化为0而不用自己循环遍历它们?我应该用memset吗?有没有"C++"方法呢?

c++ memory-management initialization new-operator

163
推荐指数
6
解决办法
12万
查看次数

为什么定义数组之外的第一个元素默认为零?

我正在准备 C++ 入门课程的期末考试。我们的教授给了我们这个问题来练习:

解释为什么代码会产生以下输出:120 200 16 0

using namespace std;
int main()
{
  int x[] = {120, 200, 16};
  for (int i = 0; i < 4; i++)
    cout << x[i] << " ";
}
Run Code Online (Sandbox Code Playgroud)

该问题的示例答案是:

cout 语句只是循环遍历其下标由 for 循环的增量定义的数组元素。元素大小不是由数组初始化定义的。for 循环定义了数组的大小,该大小恰好超出了初始化元素的数量,因此最后一个元素默认为零。第一个 for 循环打印元素 0 (120),第二个循环打印元素 1 (200),第三个循环打印元素 2 (16),第四个循环打印默认数组值零,因为元素 3 没有任何初始化。现在 i 点超出了条件并且 for 循环终止。

我有点困惑为什么数组之外的最后一个元素总是“默认”为零。为了进行实验,我将问题中的代码粘贴到我的 IDE 中,但将 for 循环更改为for (int i = 0; i < 8; i++). 然后输出更改为120 200 16 0 4196320 0 …

c++ arrays initialization undefined-behavior zero-initialization

92
推荐指数
5
解决办法
6656
查看次数

以编译方式在C++中编译时创建静态数组

可以在编译时定义静态数组,如下所示:

const std::size_t size = 5;    
unsigned int list[size] = { 1, 2, 3, 4, 5 };
Run Code Online (Sandbox Code Playgroud)

问题1 - 是否可以通过使用各种元编程技术在编译时"以编程方式"分配这些值?

问题2 - 假设数组中的所有值都是相同的barr,是否可以在编译时以编程方式选择性地分配值?

例如:

const std::size_t size = 7;        
unsigned int list[size] = { 0, 0, 2, 3, 0, 0, 0 };
Run Code Online (Sandbox Code Playgroud)
  1. 欢迎使用C++ 0x的解决方案
  2. 阵列可能非常大,几百个元素长
  3. 现在的数组只包含POD类型
  4. 还可以假设,以静态编译时兼容的方式预先知道阵列的大小.
  5. 解决方案必须是C++ (没有脚本,没有宏,没有pp或基于代码生成器的解决方案)

更新: Georg Fritzsche的解决方案非常棒,需要一些工作才能在msvc和intel编译器上进行编译,但这仍然是解决问题的一种非常有趣的方法.

c++ metaprogramming static-array

63
推荐指数
3
解决办法
3万
查看次数

零初始化初始化列表中的数组成员

我有一个数组成员的类,我想初始化为全零.

class X
{
private:
    int m_array[10];
};
Run Code Online (Sandbox Code Playgroud)

对于局部变量,有一种简单的零初始化方法(参见此处):

int myArray[10] = {};
Run Code Online (Sandbox Code Playgroud)

此外,类成员m_array显然需要初始化,因为默认初始化整数会见好就收随机的垃圾,如解释在这里.

但是,我可以看到两种方法为成员数组执行此操作:

括号:

public:
    X()
    : m_array()
    {}
Run Code Online (Sandbox Code Playgroud)

带括号:

public:
    X()
    : m_array{}
    {}
Run Code Online (Sandbox Code Playgroud)

两个都正确吗?这两者在C++ 11中有什么区别吗?

c++ initialization array-initialization initialization-list

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

如何在C++中将数组中的所有元素初始化为相同的数字

我正在尝试初始化一个设置为-1的int数组.

我尝试了以下,但它不起作用.它只将第一个值设置为-1.

int directory[100] = {-1};
Run Code Online (Sandbox Code Playgroud)

为什么它不能正常工作?

c++ arrays g++

18
推荐指数
4
解决办法
4万
查看次数

initializing struct with {0}

I'm debugging some code that essentially is identical to this:

struct Foo { int a; int b; };
struct Bar { Bar() {} Foo foo{0}; };
Run Code Online (Sandbox Code Playgroud)

When I make an instance of Bar, it seems like both a and b are initialized to zero. Is this guaranteed? Where can I find that in the spec?

c++ initialization

8
推荐指数
1
解决办法
99
查看次数

如何使用initializer-list C++初始化数组

我有一个与C++数组和结构相关的问题.我有一个结构:

struct npc_next_best_spot{
    npc_next_best_spot(): x({0}),
                          y({0}),
                          value(-1),
                          k(0),
                          i({0}), 
                          triple_ress({0}),
                          triple_number({0}),
                          bigI(0)
    {}

    int x[3]; 
    int y[3]; 
    double value; 
    int k; 
    int i[3]; 
    int triple_ress[3]; 
    int triple_number[3];
    int bigI;
};
Run Code Online (Sandbox Code Playgroud)

但是这给出了警告

"非类型的list-initializer不能用括号括起来".

那么如何确保使用0所有值的值初始化这些数组呢?

c++ arrays struct initialization

7
推荐指数
1
解决办法
4882
查看次数

C/C++:int数组[10] = {0}如何工作?

我想知道它是如何int array[10]={0}工作的?

这样整个阵列都会一路走来吗?

for(int i=0;i<10;i++) array[i]=0;
Run Code Online (Sandbox Code Playgroud)

还是更有效率?

c c++ arrays initialization

7
推荐指数
1
解决办法
1944
查看次数

初始化单值的多维数组

有人能让我想起将C中的数组(特别是多维)分配给单个值的语法吗?

我相信这些波浪形的括号做了这个,虽然我在测试时遇到了编译器错误:

int ArrayName [5][5] = {1};
Run Code Online (Sandbox Code Playgroud)

将数组初始化为1.

c

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