2016-07-13 2 views
-2

У меня создалось впечатление, что вектор может быть создан с использованием целочисленного значения переменной. У меня такое впечатление от второго ответа здесь: How to create an array when the size is a variable not a constant?Невозможно инициализировать вектор с переменной int

Однако я все еще получаю «постоянную ИНТ» сообщение об ошибке для кода ниже:

#include <vector> 
size_t ports_specified = std::count(Ports.begin(), Ports.end(), '+'); 
const int num_ports = static_cast<int>(ports_specified++); 
std::vector<string> port_info[num_ports]; 
+1

Вы создаете массив векторов. – tkausl

+1

Вы создаете массив 'std :: vector'. Возможно, вам понадобится 'std :: vector port_info (num_ports); // инициализировать вектор с элементами num_ports'. – songyuanyao

+0

«Инициализировать»? C++ поддерживает несколько форм/синтаксисов initiazliation, но ни один из них не включает '[]' в качестве синтаксического элемента. То есть ваш '[num_ports]' не может быть инициализатором. Это означает, что он интерпретируется компилятором как нечто совершенно другое. – AnT

ответ

3

Подробности значения.

std::vector<string> port_info[num_ports]; 

Это объявить статический массив num_ports числа std::vector<string> элементов. Статическому массиву нужна константа времени компиляции, а не постоянная времени выполнения, поэтому ошибка.

std::vector<string> port_info(num_ports); 

Это объявление одного std::vector<string>, который выполнен с num_ports в качестве входного значения.

Другими словами, используйте скобки вместо скобок.

2

Вы пытаетесь создать массив из n vector<string>;
не vector<string> из n элементов.

Чтобы сделать последнее в C++ 11, вектор поддерживает конструктор, который принимает size_type.

explicit vector(size_type count); 

В C++ 14, оно было изменено, чтобы Allocator по умолчанию.

explicit vector(size_type count, const Allocator& alloc = Allocator()); 

Вы можете константные вектор 10 целых чисел следующим образом:

#include <iostream> 
#include <vector> 

int main(){ 

    std::vector<int> v(10); 
    std::cout << v.size() << '\n'; 

    for (auto it: v){ 
    std::cout << it << " "; //prints: 0 0 0 0 0 0 0 0 0 0 
    } 
} 

Вектор использует default initialization, так что вы гарантированно целые значения от нуля.

Вы также можете установить начальное значение:

#include <iostream> 
#include <vector> 

int main(){ 

    std::vector<int> v(10,7); 
    std::cout << v.size() << '\n'; 

for (auto it: v){ 
    std::cout << it << " "; //prints: 7 7 7 7 7 7 7 7 7 7 
    } 
} 
Смежные вопросы