计算本地数组中的元素

时间:2015-10-20 13:10:51

标签: c++ arrays sizeof

我有Message msg = new MimeMessage(session); Multipart mp = getAttachments(); msg.setContent(mp); // Whether I set it here, or next-to-last, it never works. msg.setSentDate(new Date()); msg.setFrom(new InternetAddress("addressFrom")); msg.setRecipient(Message.RecipientType.TO, new InternetAddress("addressTo")); msg.setSubject("Subject name"); msg.setText("Message here."); Transport.send(msg); ,其中没有元素。当提示用户时,他/她输入一个号码,该号码存储在double x[12]中。

我希望程序首先检查x是否为空,如果是,请将用户的输入放在x中,或者如果不是,请将用户&# 39;在下一个免费索引中输入。

我做到了这一点:

x[0]

sizeof()是否与数组无关,是否有更好的方法可以做到这一点?

3 个答案:

答案 0 :(得分:1)

sizeof应用于数组时,它不会告诉您数组包含多少数据;它告诉你数组可以保持多少数据。您没有指定要放入double x[12]的任何数据这一事实对数组的大小没有影响。因此,sizeof将返回系统上所需的字节数,以容纳12个double的数组。

如果您想保留12个中已分配的项目数,请为其添加单独的变量。将其初始化为零,并使用它来跟踪已插入的项目数:

size_t x_count = 0;
double x[12];
void AddPayment(double Amount) {
    if (x_count == 12) {
        // Error; we cannot add more than 12 items.
        // Tell the user what's going on and quit,
        // or handle the error in some other way.
        cerr << "Cannot add more than 12 elements to x[]" << endl;
        return;
    }
    x[x_count++] = Amount;
}

答案 1 :(得分:1)

x [12]是否具有值,它的大小始终为12 * sizeof(double)。

因此,使用sizeof()运算符并不是实现目标的好方法。

最好的做法是使用用户无法输入的值(例如0)初始化x [12],并测试数组中第一个可用零位输入该值的位置。

double x[12] = { 0 };

void AddPayment(double Amount)
{
    for (int i = 0; i < 12; i++) {
        if (x[i] == 0) {
            x[i] = Amount;
            break;
        }       
    }
}

答案 2 :(得分:0)

  

我有double x[12],其中没有元素。

这是一种误解。 double x[12];创建了12个double元素,使其值处于未定义状态。所以你有12个未初始化的元素。这与 no 元素完全不同。

(例如,如果你有一个std::string类型的数组,误解就会变得更加清晰。与double不同,std::string总是被初始化为一个定义的值,一个空字符串。所以std::string x[12]肯定是12个字符串,而不是一个空数组。)

  

当提示用户时,他/她输入一个存储在其中的号码   x

     

我希望程序首先检查x是否为空,如果是,请放入   用户在x[0]中的输入,如果不是,则将用户的输入放在下一个   自由指数。

我真的很惊讶没有人建议这样做,但是数组是你想要完成的工具的错误工具。您需要一个可以成长的容器。您需要std::vector

std::vector<double> x; // starts off empty

void AddPayment(double Amount)
{
    x.push_back(Amount); // grows by 1 element
}

std::vector还有一个size()成员函数来告诉您当前的元素数量。不再需要sizeof