相关疑难解决方法(0)

如何在C++中使用数组?

C++从C继承了数组,几乎无处不在.C++提供了易于使用且不易出错的抽象(std::vector<T>自C++ 98和C++ 11std::array<T, n>以来),因此对数组的需求并不像在C中那样频繁出现.但是,当您阅读遗产时代码或与用C编写的库交互,你应该牢牢掌握数组如何工作.

本FAQ分为五个部分:

  1. 类型级别的数组和访问元素
  2. 数组创建和初始化
  3. 赋值和参数传递
  4. 多维数组和指针数组
  5. 使用数组时常见的陷阱

如果您觉得此常见问题解答中缺少重要内容,请写下答案并将其作为附加部分链接到此处.

在下文中,"数组"表示"C数组",而不是类模板std::array.假定了C声明符语法的基本知识.请注意,面对异常,手动使用newdelete如下所示是非常危险的,但这是另一个常见问题解答的主题.

(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法一开始就出现了,所以你的答案很可能被那些提出想法的人阅读.)

c++ arrays pointers c++-faq multidimensional-array

469
推荐指数
5
解决办法
12万
查看次数

具有可变大小行的C++ 2维数组

你怎么能创建一个2D数组,比如arr[][]5行,每行中的列数可变?

可能arr[5][] 是第一行arr[0][]有4列

第2行arr[1][]有5列,依此类推?

我不介意STL矢量解决方案,但我还不太了解矢量.

c++ arrays vector jagged-arrays multidimensional-array

12
推荐指数
3
解决办法
2万
查看次数

C++中的多维可变大小数组

嗨,我想做这样的事情:

int op(string s1, string s2){
    int x = s1.size();
    int y = s2.size();
    int matrix = new int[x][y]
    /* do stuff with matrix */
}
Run Code Online (Sandbox Code Playgroud)

出于某种原因,我收到以下错误:

SuperString.cpp(69) : error C2540: non-constant expression as array bound
SuperString.cpp(69) : error C2440: 'initializing' : cannot convert from 'int (*)[1]' to 'int'
        This conversion requires a reinterpret_cast, a C-style cast or function-style cast
SuperString.cpp(71) : error C2109: subscript requires array or pointer type
Run Code Online (Sandbox Code Playgroud)

谢谢!

c++ arrays

4
推荐指数
2
解决办法
3万
查看次数

在课堂上声明动态2D矢量

我们正在尝试使用2D矢量,因为我们需要一个动态增长的2D数组.

我们试过这个:在类声明中:

    vector<vector<double> > table;
Run Code Online (Sandbox Code Playgroud)

但是似乎没有分配表格.当我们尝试访问成员时,我们会遇到段错误.

那么我们尝试了这个:

类声明:

    vector<vector<double> >* table;
Run Code Online (Sandbox Code Playgroud)

构造函数:

     table = new vector<vector<double> >;
Run Code Online (Sandbox Code Playgroud)

但是现在我们之前访问它的方式(使用[] [])不起作用.

我们尝试了一个虚拟类:

class myClass {
    public:
    myClass();
    ~myClass();
    vector<vector<double> > t;
 };

myClass::myClass() 
{
    t = vector<vector<double> > (10, vector<double>(10));
}
Run Code Online (Sandbox Code Playgroud)

但它不能正常免费,我们得到核心转储.此外,当我们尝试增长数组时,我们将展开构建每个新行.

例如:

t[50] = vector<double>(5);
t[50][10] = 10;
Run Code Online (Sandbox Code Playgroud)

如果我们不这样做,我们会得到一个段错误

c++ stl vector

4
推荐指数
1
解决办法
1万
查看次数