Я хотел пообщаться с std::array
, чтобы увидеть, насколько он отличается от std::vector
. До сих пор я нашел только одно существенное различие.std :: array vs std :: vector тонкая разница
Sentence sentence = { "Hello", "from", "GCC", __VERSION__, "!" };
std::array<std::string, 10> a;
std::copy(sentence.begin(), sentence.end(), a.begin());
int i = 0;
for (const auto& e : a)
{
i++;
std::cout << e << std::endl;
}
std::cout << i << std::endl;
// outputs 10
i = 0;
for (const auto& e : sentence)
{
i++;
std::cout << e << std::endl;
}
std::cout << i << std::endl;
// outputs 5
for (int i = 0; i < a.size(); i++)
std::cout << i << " " << a[i] << std::endl;
// outputs 0 Hello
// ...
// 4 !
// 5-9 is blank
for (int i = 0; i < sentence.size(); i++)
std::cout << i << " " << sentence[i] << std::endl;
// outputs 0 Hello
// ...
// 4 !
// stops here
// The following outputs the same as above
i = 0;
for (auto it = a.begin(); it != a.end(); it++)
{
std::cout << i << " " << *it << std::endl;
i++;
}
std::cout << i << std::endl;
i = 0;
for (auto it = sentence.begin(); it != sentence.end(); it++)
{
std::cout << i << " " << *it << std::endl;
i++;
}
std::cout << i << std::endl;
Так от того, что я могу видеть, std::array
's size
и max_size
является излишним, но std::vector
' s size
и capacity
могут быть разными или одинаковыми. Это даже подтверждается по этой цитате:
Размер и максимальный размер объекта массива всегда совпадают.
Почему у std::array
есть избыточные функции? Что еще более важно, считаете ли вы, что размер std::array
не обязательно совпадает с размером std::vector
, потому что вектор имеет емкость? Кроме того, означает ли это, что std::array
s являются безопасными (то есть, у них есть интеллектуальное управление указателями, например, векторы?)
Последние предложения заставляют меня думать, что у вас может быть некоторое замешательство в том, что такое 'std :: array'; возможно, посмотрите [здесь] (http://stackoverflow.com/questions/4424579/stdvector-versus-stdarray-in-c/4424658#4424658) для быстрого сравнения. –
Вы можете подумать, что изменчивость или отсутствие таковых, а также динамическое vs статическое распределение были большими различиями ... Кроме того, для этого нужен размер как аргумент шаблона (который позволяет статическое распределение) –
Разница между 'std :: array' и' std: : vector' является FAR от тонкого –