相关疑难解决方法(0)

使用硬编码元素初始化std :: vector的最简单方法是什么?

我可以创建一个数组并像这样初始化它:

int a[] = {10, 20, 30};
Run Code Online (Sandbox Code Playgroud)

如何创建std::vector和初始化它同样优雅?

我知道的最好方法是:

std::vector<int> ints;

ints.push_back(10);
ints.push_back(20);
ints.push_back(30);
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

c++ stl initialization vector

577
推荐指数
19
解决办法
78万
查看次数

在函数中返回数组

我有一个int arr[5]传递给函数的数组fillarr(int arr[]):

int fillarr(int arr[])
{
    for(...);
    return arr;
}
Run Code Online (Sandbox Code Playgroud)
  1. 我该如何返回该数组?
  2. 我将如何使用它,说我返回一个指针我将如何访问它?

c++ arrays pointers return function

190
推荐指数
8
解决办法
73万
查看次数

数组与向量:介绍的相似之处和不同之处

C++中数组和向量之间有什么区别?差异的一个例子可能包括图书馆,象征,能力等.

排列

数组包含特定类型的特定数量的元素.因此编译器可以在编译程序时保留所需的空间量,您必须指定数组在定义时将包含的元素的类型和数量.编译程序时,编译器必须能够确定此值.一旦定义了数组,就可以使用数组的标识符和索引来访问数组的特定元素.[...]数组是零索引的; 也就是说,第一个元素是索引0.这个索引方案表示指针和数组之间C++中的密切关系以及语言为指针算法定义的规则.

- C++袖珍参考

向量

向量是动态大小的对象序列,提供阵列式operator[]随机访问.成员函数push_back通过复制构造函数复制其参数,将该副本添加为向量中的最后一项,并将其大小增加1.pop_back通过删除最后一个元素来完全相反.从向量的末尾插入或删除项目需要分摊常数,并且从任何其他位置插入或删除需要线性时间.这些是载体的基础.他们还有很多东西.在大多数情况下,矢量应该是C风格数组的首选.首先,它们是动态大小的,这意味着它们可以根据需要增长.您不必进行各种研究以找出最佳静态大小,如C阵列的情况; 矢量会根据需要增长,如果需要,可以手动调整大小.其次,向量提供与at成员函数(但不是operator[])的边界检查,这样如果引用不存在的索引而不是简单地观察程序崩溃或更糟,继续执行损坏的数据,则可以执行某些操作.

- C++ Cookbook

c++ arrays vector

104
推荐指数
3
解决办法
15万
查看次数

C++通过引用传递数组

这是允许通过引用传递数组?

 void foo(double& *bar) 
Run Code Online (Sandbox Code Playgroud)

似乎我的编译器说没有.为什么?通过引用传递数组的正确方法是什么?还是一个解决方法?我有一个数组参数,我的方法应该修改,然后我应该检索.或者,我可以使这个数组成为一个类成员,它工作正常,但它对我的代码的其他部分有很多缺点(我想避免).

感谢致敬.

c++ arrays pointers reference pass-by-reference

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

如何找到int []的大小?

我有

int list[] = {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)

如何获得大小list

我知道对于char数组,我们可以strlen(array)用来查找大小,或者'\0'在数组末尾检查.


我尝试sizeof(array) / sizeof(array[0])了一些答案,但它只适用于主?例如:

int size(int arr1[]){
    return sizeof(arr1) / sizeof(arr1[0]);
}

int main() {
    int list[] = {1, 2, 3};

    int size1 = sizeof(list) / sizeof(list[0]); // ok
    int size2 = size(list_1); // no
    // size1 and size2 are not the same
}
Run Code Online (Sandbox Code Playgroud)

为什么?

c++ arrays

43
推荐指数
6
解决办法
16万
查看次数

c ++数组的动态大小

我用c ++中的1D数组有一个小问题.我有一个功能线:

void func(int (&array)[???])
{
    // some math here;

    "for" loop {
        array[i] = something;
    }
}
Run Code Online (Sandbox Code Playgroud)

我在代码中的某处调用函数,在我进行数学运算之前,我无法知道数组的维数.该数组作为引用转到函数!,因为我需要在main()函数中使用它.我怎么能像这样分配数组?所以数组有?? 维度转到函数作为引用然后我必须放置维度并写入一些值.

c++ arrays dynamic

9
推荐指数
4
解决办法
1555
查看次数

计算阵列的长度

我有一个C++数组声明如下所述:

CString carray[] =
{
        "A",
        "B",
        "C",
        "D",
        "E"
}
Run Code Online (Sandbox Code Playgroud)

我想确定carray运行时的长度.我在做:

int iLength = sizeof(carray)/sizeof(CString);
Run Code Online (Sandbox Code Playgroud)

它是否正确?

c++ arrays

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

我应该尝试返回阵列,还是有更好的解决方案?

一个问题设置 ++的人学习C是

写一个简短的程序来模拟从塔上掉下来的球.首先,应该要求用户以米为单位的塔的初始高度.假设正常重力(9.8 m/s2),并且球没有初始速度.让程序在0,1,2,3,4和5秒后输出球高于地面的高度.球不应该在地下(高度0).

在开始使用C++之前,我有一个合理的,但主要是自学成才的Java知识.所以看看这个问题似乎应该分成两部分

  • 输入类
  • 输出类
  • 计算课
  • 物理常数类(问题设定者推荐)
  • 控制器('main')类

输入类将询问用户的起始高度,该起始高度将传递给控制器​​.控制器会给计算类提供这个和几秒钟(5),这将创建一个结果数组并将其返回给控制器.控制器会将结果数组交给输出类,然后将它们打印到控制台.

我将实际代码放在底部,但可能不需要.

您可能已经看到问题,尝试返回一个数组.我不问如何避开这个问题,有解决方法在这里这里.我问,问题是设计糟糕的结果吗?我的程序是否应该以不同的方式构建,出于性能,维护或样式的原因,我不会尝试返回像对象一样数组

这是代码(与尝试返回数组不同);

main.cpp中

/*
 * Just the main class, call other classes and passes variables around
 */
#include <iostream>
#include "dropSim.h"
using namespace std;

int main()
{
    double height = getHeight();
    int seconds = 5;
    double* results = calculateResults(height, seconds);
    outputResults(results);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

getHeight.cpp

/*
 *  Asks the user for a height from which …
Run Code Online (Sandbox Code Playgroud)

c++ arrays

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

C++如何将数组int [10] push_back转换为std :: vector <int [10]>?

#include <vector>
using namespace std;

vector<int[60]> v;
int s[60];
v.push_back(s);
Run Code Online (Sandbox Code Playgroud)

Visual Studio 2015社区中的此代码报告编译错误:

错误(活动)没有重载函数的实例"std :: vector <_Ty,_Alloc> :: push_back [with _Ty = int [60],_ Alloc = std :: allocator]"匹配参数列表

错误C2664'void std :: vector> :: push_back(const int(&)[60])':无法将参数1从'int'转换为'int(&&)[60]'

c++ arrays stl vector

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

如何在c ++中获取数组的长度?

我尝试为此编写自己的函数,但结果错了

#include <iostream>

using namespace std;

template<typename T>
int array_length(T v[]) {
    return (sizeof v)/sizeof(T);
}

int main() {
    int v[] = {1, 2, 3, 4};
    cout << array_length(v) << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++

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