相关疑难解决方法(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万
查看次数

假设STL向量存储始终是连续的是否安全?

如果你有一个已调整大小的STL向量,是否可以安全地获取元素0的地址并假设其余的向量将跟随内存?

例如

vector<char> vc(100);
// do some stuff with vc
vc.resize(200);
char* p = &vc[0];
// do stuff with *p
Run Code Online (Sandbox Code Playgroud)

c++ stl vector

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

内部数组访问比std :: vector访问快得多 - Black Magic?

我已经设置了一个测试程序来比较数组访问性能和std :: vector的性能.我发现了几个类似的问题,但似乎都没有解决我的具体问题.一段时间以来,为什么数组访问速度似乎比矢量访问快6倍,当我在过去读过它们应该是等价的时候,我一直在挠头.事实证明,这似乎是英特尔编译器(v12)和优化(发生在-O1以上的任何事情)的函数,因为我在使用gcc v4.1.2时看到std :: vector的性能更好,而数组只有 gcc v4.4.4的2倍优势.我正在使用Xeon X5355内核的RHEL 5.8机器上运行测试.顺便说一句,我发现迭代器比元素访问更快.

我正在使用以下命令进行编译:

icpc -fast test.cc
g++44 -O3 test.cc
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释速度的显着提高吗?

#include <vector>
#include <iostream>

using namespace std;

int main() {
  int sz = 100;
  clock_t start,stop;
  int ncycle=1000;
  float temp  = 1.1;

  // Set up and initialize vector
  vector< vector< vector<float> > > A(sz, vector< vector<float> >(sz,  vector<float>(sz, 1.0)));

  // Set up and initialize array
  float*** a = new float**[sz];
  for( int i=0; i<sz; ++i) {
    a[i] = new float*[sz];
    for( …
Run Code Online (Sandbox Code Playgroud)

c++ arrays iterator vector intel

6
推荐指数
1
解决办法
1759
查看次数

根据输入的动态二维数组

我需要从用户获得输入N并生成N*N矩阵.我该如何申报矩阵?一般来说,数组和矩阵的大小应该在声明中固定,对吧?怎么样vector<vector<int>>?我从来没有使用过这个,所以我需要老兵的建议.

c++ vector matrix multidimensional-array

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

STL容器速度与阵列相比

我刚刚开始研究速度真正重要的科学项目(HPC).我目前正在设计数据结构.该项目的核心是双值的3D网格,以求解偏微分方程.

由于这里的速度可能比代码的简单性更大,我想知道STL与通常的C风格数组相比如何执行.在我的例子中,因为它是一个3D网格,我想到了a)带有线性索引的一维向量b)3个向量的向量或c)一维c样式数组或d)三维c样式阵列.

我查找了较旧的问题,但我只发现了构建/破坏的问题(这里不重要,因为数据结构只在程序启动时创建一次 - 快速索引和计算很重要)或不同STL容器的比较.

感谢帮助

c++ arrays performance stl hpc

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

生成整数数组

我是c ++的新手,我想写一个程序来生成一个整数数组.我一直在收到错误

test[i][j]=i;

invalid types 'int[int]' for array 
Run Code Online (Sandbox Code Playgroud)

谁能告诉我这里有什么问题?提前致谢.

int main()
{
    int rows;
    int cols;
    cin>>rows>>cols;
    int test[rows][cols];
    get_test(rows,cols,&test[0][0]);
    cout<<test[1][1]<<endl;
    return 0;
}

int get_test(int rows,int cols,int *test)
{ 
    int h=rows;
    int w=cols;
    int i=0,j=0;

    for(i=0;i<h;i++)
    {
        for (j=0;j<w;j++)
        {
            test[i][j]=i;
        }
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ visual-c++

3
推荐指数
1
解决办法
159
查看次数