我正在写一些代码示例,从“如何像C ++中的计算机科学家思考”中,这是关于处理播放卡类型对象和甲板的代码示例。我面临着这种情况:

int Card::find(const std::vector<Card>& deck) const {
    size_t deckSize = deck.size();
    for (size_t i=0; i<deckSize; i++)
        if (equals(*this, deck[i])) return i;

    return -1;
}

我无法像文本中的Visual Studio 2010中的C ++的向量上使用“ .length()”,而是必须使用.size()返回(我相信)std :: size_type。我认为我可以使用size_t并逃脱它,以避免在阅读时避免不同的架构上的问题,但是我想知道我是否返回 i, ,但是它比整数大,我会崩溃该程序吗?

在我的问题上被编辑为更具体:]一旦我开始使用矢量来比卡更大的事物,我考虑使用无符号int,因为编译器不匹配警告,但是我觉得返回无签名的int或int有一些问题:1) INT不会采用足够大的向量指数。 2)返回未签名的int不会让我返回-1。 3)未签名的int在所有架构上都不等于size_t(我也在ARM Cortex-M3上进行微控制器编程)。

如果我有足够大的矢量,该怎么办?

有帮助吗?

解决方案

铸造 size_tint 不会“崩溃”您的程序,但这是一种不良习惯。另一方面,STL包括不错 find 您正在做什么的算法。

其他提示

INT在32 /64位Windows和Linux上为32位。如果在31日大于两个,我将被截断。您可以使用未签名的int,除非在向量中存储超过4 g的元素,否则您的程序会很好:)

size_t 通常是一个 unsigned int 但是你不能依靠这一点。如果比一个大 int 您不会崩溃,只会溢出到(可能是负)的数字。

假设您不会在一个矢量中拥有数千张卡片,我很高兴返回 int.

你也可以返回 std::pair<size_t, bool>, , 如同 std::map insert(). 。第二个模板参数意味着成功或失败。

如果可以的话,也可以使用 boost ::可选

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top