我是c ++的新手。我只想声明一个数组并找到它的大小。我该怎么做呢?我不断得到一个人物或其他东西。
string vidArray[] = {"fingers.mov","motion_test.mov"};
int numVids = vidArray->size();
答案 0 :(得分:4)
只需使用
vector<string> s{"s1", "s2", "s3"};
用于初始化“数组”。
然后你可以使用
s.size()
获取向量的大小。
答案 1 :(得分:2)
首先,您所做的 vidArray-&gt; size()调用相当于 vidArray [0] .call(),因为数组只不过是一个数组指向第一个元素的指针,所以通过调用vidArray-&gt; size(),您只需执行:(* vidArray).size()。
这样的旧数组没有size(),但是有一些不可取的hacks基于宏来获取数组的计数:
#define COUNTOF(arr) (sizeof(arr) / sizeof(arr[0]))
COUNTOF(vidArray)
这将返回数组大小,但这不是一件好事(Explanations),这就是为什么我建议你使用std :: vector,如果你需要动态调整大小:
std::vector<std::string> vid;
vid.push_back("fingers.mov");
vid.push_back("motion_test.mov");
size_t vidSize = vid.size();
你也可以使用boost :: assign(Documentation)
初始化这种方式std::vector<std::string> vid;
vid += std::string("fingers.mov"),std::string("motion_test.mov");
或者一个boost :: array(Documentation)如果你想要一个大小不同的数组(即正如Walter在评论中所述,如果你已经在使用c ++ 11,你可以使用std: :数组,它是boost :: array但在标准库中)
boost::array<std::string,2> vid = {std::string("fingers.mov"),std::string("motion_test.mov")};
size_t vidSize = vid.size();
答案 2 :(得分:1)
当传递时,数组衰减到指向第一个元素的指针。在您的情况下也会发生这种情况 - 您得到string*
并且您实际上调用了字符串的成员函数size()
。它返回它持有的字符数。
要做你想做的事,把数组的总大小除以单个元素的大小:
int numVids = sizeof(vidArray) / sizeof(string);
答案 3 :(得分:0)
在C ++中,数组不是对象。他们没有像size()这样的方法。你调用的是数组中第一个字符串的size()方法,因为数组的内存地址也是它第一个条目的内存地址。
当您需要一个行为类似于数组的智能容器类时,可以使用std::vector。它带有许多方便的功能,包括size()函数。
答案 4 :(得分:0)
正如@Philipp建议的那样,你应该更喜欢像stdd::vector
这样的容器。但是,这并不意味着您应该跳过基础知识,因此在学习语言之前最好避免像STL这样的库。
要获取数组的大小,即元素的数量,请使用sizeof
运算符,该运算符以字节为单位返回数组的大小:
int arr[10];
size_t element_count = sizeof arr / sizeof arr[0];
请注意,如果将数组传递给函数,它会衰减为指针,因此这不起作用。
void foo(int arr[10]) {
// element_count == sizeof int*, oops
size_t element_count = sizeof arr;
}
在这种情况下,你需要将数组的大小传递给函数
void foo(int *arr, size_t size) {
}
一旦掌握了这些东西,就更喜欢像vector
这样更安全,更方便的容器。它按需动态增长,保证元素将存储在连续的内存中(如数组),提供安全的访问方法(如果需要),如::at()
,您不必担心手动内存管理。 / p>