Как создать двухмерный вектор
Как правильно очистить двухмерный вектор string-ов?
Всем привет! Есть двухмерный вектор string: std::vector<std::vector<std::string>> functions(2); В.
Двухмерный вектор строк
Столкнулся с проблемой и нужна помощь. Как создать и заполнить двухмерный вектор? vector <.
Как создать двухмерный, статический массив
Как создать двухмерный, статический массив, чтобы в него можно было вставить и числа, и символы?
Вернуть двухмерный вектор с класса?
Как правильно вернуть матрицу созданною через вектора из класса, в котором она созданная? вот мой.
Двумерный вектор в C++
Программирование и разработка
Вектор используется для создания динамического массива, и размер вектора можно увеличивать и уменьшать, добавляя и удаляя элементы из вектора. Когда вектор объявляется внутри другого вектора, этот вектор называется 2-мерным вектором, который работает как 2-мерный массив. Двумерный вектор содержит несколько строк, каждая из которых является другим вектором. В этом руководстве показано использование двумерного вектора в C ++.
Синтаксис:
Синтаксис двумерного вектора приведен ниже.
Конкретный тип данных определяется во время объявления вектора. Если размер вектора не определен, вектор называется пустым вектором. Размер вектора можно изменить, используя различные методы или инициализируя вектор.
Пример 1. Создайте двумерный вектор из равного количества столбцов
В следующем примере показан способ объявления двухмерного вектора из трех строк и четырех столбцов, который содержит символьные данные. Здесь значения вектора были определены в момент вектор декларации и вложенную » для » петли используется для печати значения вектора.
Следующий вывод появится после выполнения вышеуказанного кода.
Пример 2: Создайте двумерный вектор с другим количеством столбцов
В следующем примере показан способ объявления двухмерного вектора из четырех строк, где первая строка содержит один столбец, вторая строка содержит два столбца, третья строка содержит три столбца, а четвертая строка содержит четыре столбца. Вектор инициализации с целым данных и распечатаны с помощью вложенной « для » петли.
//Include necessary libraries
#include <iostream>
#include <vector>
using namespace std ;
int main ( )
<
/*
Initialize the 2D vector with the
integer number where each row contains different
number of elements
*/
vector < vector > intVector
< < 20 >, < 10 , 30 >, < 50 , 40 , 60 >, < 80 , 10 , 70 , 90 >> ;
//Print the values of the vector using for loop
cout << «The values of the vector are: \n « ;
for ( vectorrow : intVector )
<
for ( int val : row )
cout << val << » « ;
cout << ‘ \n ‘ ;
>
return ;
>
Следующий вывод появится после выполнения вышеуказанного кода.
Пример 3: Инициализировать двумерный пустой вектор со значением по умолчанию
Способ объявления 2-мерного пустого вектора числа с плавающей запятой и инициализации вектора с числом с плавающей запятой показан в следующем примере. Здесь вложенный цикл for был использован для вставки данных в вектор с помощью функции push_back () и печати значений вектора.
Значение по умолчанию 6.5 было вставлено в вектор путем создания 2 строк и 3 столбцов. Функция size () использовалась для подсчета общего количества строк и столбцов для печати значений вектора.
//Include necessary libraries
#include <iostream>
#include <vector>
using namespace std ;
int main ( )
<
//Set the default value
float default_value = 6.5 ;
//Define the outer vector
vector < vector > outVect ;for ( int i = ; i < 2 ; i ++ )
<
//Define the inner vector
vectorinVect ;
for ( int j = ; j < 3 ; j ++ ) <
//Insert the default value
inVect. push_back ( default_value ) ;
>
//Insert the inner vector to outer vector
outVect. push_back ( inVect ) ;
>//Print the values of the vector
cout << «The values of the vector are: \n « ;
for ( int i = ; i < outVect. size ( ) ; i ++ )
<
for ( int j = ; j < outVect [ i ] . size ( ) ; j ++ )
cout << outVect [ i ] [ j ] << » « ;
cout << ‘ \n ‘ ;
>
return ;
>
Следующий вывод появится после выполнения вышеуказанного кода. Выходные данные показывают содержимое вектора на основе значения по умолчанию и количества строк и столбцов, созданных кодом.
Пример 4: Инициализировать двумерный пустой вектор, принимая входные значения
В следующем примере показан способ создания двухмерного вектора, получая данные от пользователя. В коде объявлен двумерный пустой вектор целого числа, который будет содержать 2 строки и 3 столбца.
Вложенная » для » петли используется, чтобы принять 6 (2 × 3) целые числа от пользователя и вставить их в вектор с использованием значений индекса. Еще одна вложенная » для » петли была использовано для печати вставленных значений вектора.
//Include necessary libraries
#include <iostream>
#include <vector>
using namespace std ;
int main ( )
<
//Define the number of cols
int col = 3 ;
//Define the number of rows
int row = 2 ;
//Initialize an integer variable
int val = ;
//Initialize the empty vector
vector < vector > int2DVector ;//Resize the outer vector
int2DVector. resize ( row ) ;
for ( int i = ; i < row ; i ++ )
<
//Resize the inner vector
int2DVector [ i ] . resize ( col ) ;
for ( int j = ; j < col ; j ++ )
<
//Take input from the user
cout <> val ;
//Insert into the vector
int2DVector [ i ] [ j ] = val ;
>
>//Print the values of the vector
cout << «The values of the vector are: \n « ;
for ( int i = ; i < int2DVector. size ( ) ; i ++ )
<
for ( int j = ; j < int2DVector [ i ] . size ( ) ; j ++ )
cout << int2DVector [ i ] [ j ] << » « ;
cout << ‘ \n ‘ ;
>
return ;
>
Следующий вывод появится после выполнения вышеуказанного кода. Выходные данные показывают 6 входных значений и содержимое вектора в зависимости от количества строк и столбцов.
Заключение
Двумерный вектор используется в программировании на C ++ для хранения и доступа к данным на основе строк и столбцов. В этом уроке на простых примерах были показаны различные способы создания двумерного вектора. Цель использования двумерного вектора в C ++ будет понятна после прочтения этого руководства.
Двумерный vector
Можно указать значение, которым нужно заполнить вектор. Если T — класс, и значение не указано, то будет использован конструктор по умолчанию.
Если число элементов заранее не известно, то можно воспользоваться push_back() :
не компилировал. но по памяти вроде так.
Если массив будет прямоугольным и его размеры будет неизменными, то можно сделать класс, который одномерный массив разворачивает в линейный:
Или, используя std::vector внутри:
Он ведёт себя так же, как и обычные двумерные массивы, но его размеры определяются во время выполнения программы, а не во время компиляции, как у обычных статических массивов. Строка кода
аналогична такому объявлению статического массива
Заполняются они так же, допустим, так:
Преимущество этого класса в том, что мы выделяем память одним непрерывным блоком, как и статический массив в Си. Кроме того, в operator[] можно добавить проверки выхода за пределы массива. Но выход за пределы строки проверить нельзя, не усложняя класс прокси-объектами. Такой выход за пределы строки даст нам элемент следующей строки.
Vector C++
Размер указывать заранее не нужно. Память будет выделяться по мере необходимости, иначе говоря, динамически.
К каждому элементу вектора легко получить доступ зная его порядковый номер.
Теорию можно изучить, например, в Википедии
Пример
1. vector vec0 size is 0 vector vec0 is empty
// 2. create vector with 5 elements each element is 4 vector < int > vec(5, 4); cout << endl << «2. vector vec size is » << vec.size(); if (vec.empty()) < cout << endl << "vector vec is empty" << endl; >else
2. vector vec size is 5 vector vec is not empty
// 3. go through vector elements with a standard loop cout << endl << «3. «; for ( int i = 0; i < vec.size(); i++) < cout << vec[i] << " "; >cout << endl;
// 4. go through vector elements in a shorter way cout << «4. «; for ( auto item : vec) < cout << item << " "; >// 5. add new elements to the end vec.push_back(7); vec.push_back(8); vec.push_back(9); cout << endl << «5. new elements are added with push_back»; // 6. check that they are at the end cout << endl << «6. «; for ( auto item : vec) < cout << item << " "; >// 7. remove elements from the end vec.pop_back(); vec.pop_back(); // 8. check that elements are removed cout << endl << «8. «; for ( auto item : vec) < cout << item << " "; >// 9. copy vector vector < int > vec_two(vec); cout << endl << «9. vec_two size is » << vec_two.size() << endl; // 10. check vec_two content cout << endl << «10. «; for ( auto item : vec_two) < cout << item << " "; >// 11. check if vectors are identical cout << endl << «11. «; if (vec == vec_two) < cout << "identical"; >else < cout << "not identical"; >cout << endl; return 0; >
После запуска программы результат будет таким:
1. vector vec0 size is 0 vector vec0 is empty 2. vector vec size is 5 vector vec is not empty 3. 4 4 4 4 4 4. 4 4 4 4 4 5. new elements are added with push_back 6. 4 4 4 4 4 7 8 9 8. 4 4 4 4 4 7 9. vec_two size is 6 10. 4 4 4 4 4 7 11. identical C:\Users\ao\source\repos\vectors1.exe (process 111800) exited with code 0. To automatically close the console when debugging stops, enable Tools->Options->Debugging->Automatically close the console when debugging stops. Press any key to close this window . . .
Задача
Создать вектор целых чисел vi от 0 до 9 и вывести на экран.
Вывести на экран размер вектора vi.
#include <iostream> #include <string> #include <vector> using namespace std; int main() < vector<int>vi; for ( int i = 0; i < 10; i++) < vi.push_back(i); >for ( auto item : vi) < cout << item << " "; >cout << endl << endl; cout << » int vector vi has » << vi.size() << » elements. » << endl; cout << endl; return 0; >
0 1 2 3 4 5 6 7 8 9 int vector vi has 10 elements. C:\Users\ao\source\repos\vector_00.exe (process 101408) exited with code 0. To automatically close the console when debugging stops, enable Tools->Options->Debugging->Automatically close the console when debugging stops. Press any key to close this window . . .
Вручную меняем значения нескольких элементов
vi[5] = 3; vi[6] = -1; vi[1] = 99;
Выведем изменённый вектор на экран другим способом:
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 C:\Users\ao\source\repos\vector_00.exe (process 101408) exited with code 0. To automatically close the console when debugging stops, enable Tools->Options->Debugging->Automatically close the console when debugging stops. Press any key to close this window . . .
Вычислим сколько элементов вектора равны 3. Для вывода вектора на экран воспользуемся новым способом.
#include <iostream> #include <string> #include <vector> #include <algorithm> // for sort and count using namespace std; int main() < vector<int>vi; for ( int i = 0; i < 10; i++) < vi.push_back(i); >vi[5] = 3; vi[6] = -1; vi[1] = 99; for ( auto i = begin(vi); i != end(vi); i++) < cout << *i << " "; >cout << endl; int threes = count(begin(vi), end(vi), 3); cout << «vector of ints has » << threes << » elements with value 3″; cout << endl; return 0; >
0 99 2 3 4 3 -1 7 8 9 vector of ints has 2 elements with value 3 C:\Users\ao\source\repos\vector_00.exe (process 4108) exited with code 0. To automatically close the console when debugging stops, enable Tools->Options->Debugging->Automatically close the console when debugging stops. Press any key to close this window . . .
Задача
Записать три слова, введённые с клавиатуры в вектор, вывести их на экран, отсортировать по алфавиту, определить сколько в первом слове букв о.
#include <iostream> #include <string> #include <vector> #include <algorithm> // for sort and count using namespace std; int main() < vector< string > vs; cout << "enter three words "; for ( int i = 0; i < 3; i++) < string s; cin >> s; vs.push_back(s); >for ( auto item : vs) < cout << item << " "; >cout << endl; sort(begin(vs), end(vs)); for ( auto item : vs) < cout << item << " "; >cout << endl; int os = count(begin(vs[0]), end(vs[0]), 'o'); cout << «first word has » << os << » letter o's «; return 0; >
enter three words heihei andreyolegovich topbicycle heihei andreyolegovich topbicycle andreyolegovich heihei topbicycle first word has 2 letter o's C:\Users\wd973579\source\repos\Plural_02\Debug\Plural_02.exe (process 93128) exited with code 0. To automatically close the console when debugging stops, enable Tools->Options->Debugging->Automatically close the console when debugging stops. Press any key to close this window . . .
Как Вы можете увидеть слова отсортированы по алфавиту. В названии сайта andreyolegovich две буквы о.
Вывести по отдельности элементы
Задача: дана строка с числами через запятую.
Нужно:
вывести числа на экран по отдельности.
вычислить сумму чисел
После запуска программы результат будет таким:
12 1 214 3234 12 1 214 3234 Сумма чисел в строке = 3461 C:\Users\ao\source\repos\vector_01.exe (process 144128) exited with code 0. To automatically close the console when debugging stops, enable Tools->Options->Debugging->Automatically close the console when debugging stops. Press any key to close this window . . .
Создать двухмерный Vector C++
Задача: создать двухмерный вектор 3 на 5 и заполнить его случайными числами от 0 до 9
После запуска программы результат будет таким:
1 7 4 0 9 4 8 8 2 4 5 5 1 7 1 C:\Users\ao\source\repos\vector_02.exe (process 145912) exited with code 0. To automatically close the console when debugging stops, enable Tools->Options->Debugging->Automatically close the console when debugging stops. Press any key to close this window . . .
Видео
В видео ниже есть всё, что описано в статье кроме более быстрого перебора элеметов вектора.
Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых