C++动态大小数组

gho*_*nsd 0 c++ arrays char

我需要你对C /С++数组的帮助.我已经用Python编程了三年,它的数组(被称为list)非常容易使用.

>>> array = [1,2,3,4]
>>> array.append(5)
>>> array
[1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)

正如我在C/C++中读到的,我需要创建一个指向数组的指针.请你做一个包含数组的小型草图,char并且只有一个方法附加,它被调用append并接收a char作为参数.此方法将数组的大小增加1并将给定的数组添加char到此数组中.

有人可能认为这是一个功课,但我无法理解数组,指针和内存分配如何工作的原理.我想这并不难,但它是在像Python这样的语言之后发生的,因为我并不关心Python中的这些东西.请问您能提供一小段代码并附上解释吗?

提前致谢!

Che*_*Alf 5

这是一个标准的C++程序:

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    vector<int> array = {1, 2, 3, 4};
    array.push_back( 5 );

    for( auto const item : array )
    {
        cout << item << " ";
    }
    cout << endl;
}
Run Code Online (Sandbox Code Playgroud)

Visual C++特定的.

即使是最新版本的Microsoft Visual C++,即2012年11月的CTP,版本11.0以及一系列支持C++ 11标准的修复程序,还不支持上面使用的一般初始化.

使用Visual C++,如在C++ 03中,该表示法仅支持所谓的聚合类型,它基本上是纯原始数组或纯原始结构(可能包含更多C++'ish类型)或内置类型.因此,使用Visual C++,一种方法是对原始数组使用该表示法,然后使用该原始数组初始化vector:

#include <iostream>
#include <iterator>     // std::begin, std:.end
#include <vector>
using namespace std;

int main()
{
    int const   data[]  = {1, 2, 3, 4};
    vector<int> array( begin( data ), end( data ) );
    array.push_back( 5 );

    for( auto const item : array )
    {
        cout << item << " ";
    }
    cout << endl;
}
Run Code Online (Sandbox Code Playgroud)

而这与Visual Studio 2012附带的基本Visual C++ 11.0一起编译也很好.

但是,基于范围的for循环可能无法使用Visual C++ 10.0(对应于Visual Studio 2010)进行编译.

  • 在您自己编写编译器之前,只使用字母"o",您才不是真正的C++程序员.http://search.dilbert.com/comic/We%20Didn't%20Have%20Zeros (3认同)
  • @SebastianCabot:C++ 11是当前的C++标准. (2认同)