如何使用向量打印值?如何在数组末尾添加值?

时间:2011-05-07 23:54:43

标签: c++ arrays

我有两个问题:

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

如何使用具有新大小的数组并在数组末尾添加新元素?

3 个答案:

答案 0 :(得分:2)

(1)

list<int>::const_iterator it;

for (it = a.begin(); it != a.end(); ++it)
    cout << *it << endl;

(2)使用new []创建第二个数组并复制第一个数组。记得删除[]原件。或者,更好的是,摆脱数组并使用向量,然后推回新元素。矢量自动调整大小。

答案 1 :(得分:1)

  1. 你应该在for()循环中将i初始化为0 要打印值,您必须为()循环创建另一个值,但不是将元素添加到列表中,而是将它们打印到cout。

    有(...)
    {
         //打印到cout
    }

  2. 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