我有两个问题:
1-如何打印下面所述代码的a值
#include <iostream>
#include <list>
using namespace std;
int main()
{
int i;
list<int> a;
for(i; i<5; i++)
{
a.push_back(i);
}
system("pause");
return 0;
}
2-如何将新元素添加到整数数组?例如,我有一个数组:
int *a;
int size = 3
a = new int [size];
a[0]=0;
a[1]=1;
a[2]=2;
//Now, I would like to add a new element to my array by increasing its size by one
size += size; // new size is 4
如何使用具有新大小的数组并在数组末尾添加新元素?
答案 0 :(得分:2)
(1)
list<int>::const_iterator it;
for (it = a.begin(); it != a.end(); ++it)
cout << *it << endl;
(2)使用new []创建第二个数组并复制第一个数组。记得删除[]原件。或者,更好的是,摆脱数组并使用向量,然后推回新元素。矢量自动调整大小。
答案 1 :(得分:1)
你应该在for()循环中将i初始化为0 要打印值,您必须为()循环创建另一个值,但不是将元素添加到列表中,而是将它们打印到cout。
有(...)
{
//打印到cout
}
int * b = new int [size + 1];
您应该使用memcpy()将a复制到b中,然后将最后一个元素添加到b
最后你应该为a和b调用delete。
答案 2 :(得分:1)
<强> 1 即可。首选std
算法来手动编码for
循环:
std::copy(list.begin(), list.end(),
std::ostream_iterator<int>(std::cout, "\n"));
如果手动编码循环仍然是正确的选择,请考虑Boost.Foreach:
BOOST_FOREACH(int i, list) {
std::cout << i << "\n";
}
2 这就是为什么你应该使用std
容器而不是指针和数组的一个原因。让其他人调试硬编码。
int* newa = new int[newsize];
std::copy(a, a+std::min(newsize, size), newa);
delete[] a;
a = newa;
size = newsize;
但是,这段代码是否会将额外的项目初始化或未初始化?此代码提供哪些异常保证?最好完全跳过new
,然后声明std::vector
。