在C++中,你不会使用数组(int[]
或int*
)来的,因为他们在几个方面都讨厌:你必须通过SIZE
各地,他们通常异常不安全(你必须捕获异常,删除数组,然后重新抛出异常),并且很难正确使用它作为类成员。使用标准库容器或迭代器范围。
惯用的方式做你想要做的是使用迭代器和对什么:
template <typename IT_1, typename IT_2>
std::pair<int,int> getChange(IT1 begin, IT1 end, IT2 begin2)
{
for (; begin != end; ++begin, ++begin2)
{
if (*begin != *begin2) return std::make_pair(*begin,*begin2);
}
return std::make_pair(0,0);
}
void main() {
int myNumbers[] = {1, 0, 2, 3};
int possibilities[] = {0, 1, 2, 3};
std::pair<int,int> change = getChange(possibilities, possibilities + 4,
myNumbers);
printf("%i/%i\n", change.first, change.second);
}
注意,第二序列(通过myNumbers)预计为至少只要是作为第一序列。如果你与迭代器和函数模板不舒服的是,你可以随时使用向量来代替:
std::pair<int,int> getChange(std::vector<int> a, std::vector<int> b) {
for (int i = 0; i < a.size() && i < b.size(); ++i)
{
if (a[i] != b[i]) return std::make_pair(a[i],b[i]);
}
return std::make_pair(0,0);
}
void main() {
int _myNumbers[] = {1, 0, 2, 3};
int _possibilities[] = {0, 1, 2, 3};
std::vector<int> myNumbers(_myNumbers,_myNuymbers+4),
possibilities(_possibilities,_possibilities+4);
std::pair<int,int> change = getChange(possibilities, myNumbers);
printf("%i/%i\n", change.first, change.second);
}
而后者似乎而非阵列版本更详细的(毕竟,它创建两个数组,然后复制将它们的值写入向量中),请记住从一个常量初始化一个数组是非常罕见的事情:大多数情况下,数组(和向量)是由一段代码专门用于动态初始化的。这样的代码通常可以用于数组和矢量,只需很少的更改。
而且,当然,如果您最终使用它们的话,您可以将typedef
均设为std::pair<int,int>
和std::vector<int>
更短的名称。
我建议你得到一个基本的C++书籍,因为这是错误的如此多的水平。 – Puppy 2011-01-25 13:04:33
你知道你在'if'测试之外有'break'声明吗?你只能通过for循环一次。我认为它想进入'if'测试,所以你打破了第一个区别。 – Chowlett 2011-01-25 13:05:31
你*有*使用数组还是这是一个学习练习? – Tony 2011-01-25 13:06:01