(注意:这个问题是不必指定元素的数量,仍然允许直接初始化嵌套类型.)
这个问题讨论了C数组的用途int arr[20];.在他的回答中,@ James Kanze展示了C阵列的最后一个据点,它具有独特的初始化特性:
int arr[] = { 1, 3, 3, 7, 0, 4, 2, 0, 3, 1, 4, 1, 5, 9 };
Run Code Online (Sandbox Code Playgroud)
我们没有必要指定元素的数量,万岁!现在遍历它与C++ 11的功能std::begin和std::end从<iterator>(或您自己的变体),你永远需要甚至认为它的大小.
现在,有没有(可能是TMP)方法实现同样的目标std::array?使用宏可以使它看起来更好.:)
??? std_array = { "here", "be", "elements" };
Run Code Online (Sandbox Code Playgroud)
编辑:中间版本,从各种答案编译,如下所示:
#include <array>
#include <utility>
template<class T, class... Tail, class Elem = typename std::decay<T>::type>
std::array<Elem,1+sizeof...(Tail)> make_array(T&& head, Tail&&... values)
{
return { std::forward<T>(head), std::forward<Tail>(values)... };
}
// in code …Run Code Online (Sandbox Code Playgroud) 在 TR1 和 C++11之间std::vector和std::array中,动态和固定大小的数组都有安全的替代方案,它们知道自己的长度并且不会表现出可怕的指针/数组二元性。
所以我的问题是,在 C++ 中是否有任何情况必须使用C 数组(而不是调用 C 库代码),或者完全“禁止”它们是否合理?
编辑:
感谢大家的回答,但事实证明这个问题是重复的
现在我们有了 std::array C 风格的数组还有什么用?
所以我会指示大家去那里看看。
[我不知道如何结束我自己的问题,但如果版主(或更多有投票权的人)路过,请随时将其标记为重复并删除这句话。]
我目前正在尝试创建一个包含浮点数组的向量.我有一段难以忍受的时间.
我有以下代码:
float testArray[4] = {20, -3.14/2, 5, -3.14/2};
std::vector<float[4]> inputVector;
std::vector<float[4]>::iterator it = inputVector.begin();
inputVector.insert(it, testArray);
Run Code Online (Sandbox Code Playgroud)
我一直收到一个错误说"数组必须使用大括号括起来的初始化程序初始化"和"无效的数组赋值".我用int的向量(而不是数组的向量)尝试了相同的代码,并且没有任何问题.
我认为存在一个我不理解的根本问题.
任何帮助表示赞赏!
我在阅读另一个问题的绝佳答案,给出了以下具体示例:
char[] array = {'a', 'b', 'c', '\0'};
Run Code Online (Sandbox Code Playgroud)
Thing* t = new Thing[size];
t[someindex].dosomething();
Run Code Online (Sandbox Code Playgroud)
我评论说,作为一种好的做法,您应该添加delete[]第二个示例,因为这是人们忘记导致内存泄漏的位。
但是我不记得您是否需要delete[]一开始。我不认为您会这样做,因为没有,new所以它在堆栈中,但是我不是100%确信那是正确的。