我可以创建一个数组并像这样初始化它:
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)
有没有更好的办法?
我有一个int arr[5]传递给函数的数组fillarr(int arr[]):
int fillarr(int arr[])
{
for(...);
return arr;
}
Run Code Online (Sandbox Code Playgroud)
C++中数组和向量之间有什么区别?差异的一个例子可能包括图书馆,象征,能力等.
数组包含特定类型的特定数量的元素.因此编译器可以在编译程序时保留所需的空间量,您必须指定数组在定义时将包含的元素的类型和数量.编译程序时,编译器必须能够确定此值.一旦定义了数组,就可以使用数组的标识符和索引来访问数组的特定元素.[...]数组是零索引的; 也就是说,第一个元素是索引0.这个索引方案表示指针和数组之间C++中的密切关系以及语言为指针算法定义的规则.
- C++袖珍参考
向量是动态大小的对象序列,提供阵列式
operator[]随机访问.成员函数push_back通过复制构造函数复制其参数,将该副本添加为向量中的最后一项,并将其大小增加1.pop_back通过删除最后一个元素来完全相反.从向量的末尾插入或删除项目需要分摊常数,并且从任何其他位置插入或删除需要线性时间.这些是载体的基础.他们还有很多东西.在大多数情况下,矢量应该是C风格数组的首选.首先,它们是动态大小的,这意味着它们可以根据需要增长.您不必进行各种研究以找出最佳静态大小,如C阵列的情况; 矢量会根据需要增长,如果需要,可以手动调整大小.其次,向量提供与at成员函数(但不是operator[])的边界检查,这样如果引用不存在的索引而不是简单地观察程序崩溃或更糟,继续执行损坏的数据,则可以执行某些操作.- C++ Cookbook
这是允许通过引用传递数组?
void foo(double& *bar)
Run Code Online (Sandbox Code Playgroud)
似乎我的编译器说没有.为什么?通过引用传递数组的正确方法是什么?还是一个解决方法?我有一个数组参数,我的方法应该修改,然后我应该检索.或者,我可以使这个数组成为一个类成员,它工作正常,但它对我的代码的其他部分有很多缺点(我想避免).
感谢致敬.
我有
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 ++中的1D数组有一个小问题.我有一个功能线:
void func(int (&array)[???])
{
// some math here;
"for" loop {
array[i] = something;
}
}
Run Code Online (Sandbox Code Playgroud)
我在代码中的某处调用函数,在我进行数学运算之前,我无法知道数组的维数.该数组作为引用转到函数!,因为我需要在main()函数中使用它.我怎么能像这样分配数组?所以数组有?? 维度转到函数作为引用然后我必须放置维度并写入一些值.
我有一个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是
写一个简短的程序来模拟从塔上掉下来的球.首先,应该要求用户以米为单位的塔的初始高度.假设正常重力(9.8 m/s2),并且球没有初始速度.让程序在0,1,2,3,4和5秒后输出球高于地面的高度.球不应该在地下(高度0).
在开始使用C++之前,我有一个合理的,但主要是自学成才的Java知识.所以看看这个问题似乎应该分成两部分
输入类将询问用户的起始高度,该起始高度将传递给控制器.控制器会给计算类提供这个和几秒钟(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) #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]'
我尝试为此编写自己的函数,但结果错了
#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)