Cách nhập/xuất vector 2 chiều bằng cơ chế .at()

Hi mọi người,

Tình hình mình đang làm bài tập nhập/xuất vector 2 chiều.
Thì cái đề bài này chỉ yêu cầu thế, nên ta có thể hoàn toàn làm như sau:

#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;

void NhapMang(vector<vector<int>> &a)
{
	int dong;
	cout << "\nNhap vao so dong: ";
	cin >> dong;
	a.resize(dong);

	for(int i = 0; i < dong; i++)
	{
		int cot;
		cout << "\nNhap vao so cot cua dong " << i << ": ";
		cin >> cot;
		a[i].resize(cot);
		for(int j = 0; j < cot; j++)
		{
			cout << "\nNhap vao a[" << i << "][" << j << "] = ";
			cin >> a[i][j];
		}
	}
}

void XuatMang(vector<vector<int>> a)
{
	int dong = a.size();

	for(int i = 0; i < dong; i++)
	{
		int cot = a[i].size();
		for(int j = 0; j < cot; j++)
		{
			cout << setw(6) << a[i][j];
		}
		cout << endl;
	}
}

int main()
{
	vector<vector<int>> a; // Khai báo vector 2 chiều.

	NhapMang(a);
	XuatMang(a);

	system("pause");
	return 0;
}

Nhưng do là hôm trước, em coi videos của anh Đạt về container vector trên Youtube thì ảnh có nói là nếu dùng vector thì đừng code theo kiểu arr[...] hay arr[...][....] mà nên code theo kiểu arr.at(...)
Cá nhân em thấy điều này cũng có lý, nhưng nhập/xuất vector 2 chiều bằng cơ chế .at() thì em không biết làm sao.
Em thử để arr.at(arr.at(j)) thì cũng không được.
Ai biết làm theo cách này thì cho em xin source code hoặc hướng dẫn trực tiếp cho em bằng cách reply bên dưới nhé!

Em cảm ơn :slight_smile:

2 Likes

arr.at(i).at(j)
:slight_smile:

5 Likes

Cảm ơn anh nhé, em đã làm được :thumbsup:


Nhân tiện, bạn nào cần source code thì đây luôn:

#include <iostream>
#include <iomanip>
#include <vector>

void InVector(std::vector<std::vector<int>> &arr, int rows, int columns)
{
	for (int i = 0; i < rows; ++i)
	{
		for (int j = 0; j < columns; ++j)
		{
			std::cout << "Nhap a[" << i << "][" << j << "] = ";
			std::cin >> arr.at(i).at(j);
		}
	}
}

void OutVector(std::vector<std::vector<int>> arr)
{
	int rows = arr.size();
	int columns = arr.at(0).size();
	for (int i = 0; i < rows; ++i)
	{
		for (int j = 0; j < columns; ++j)
		{
			std::cout << std::setw(5) << arr.at(i).at(j);
		}
		std::cout << std::endl;
	}
}

int main()
{
	std::vector<std::vector<int>> arr;
	arr.resize(3);
	for (int i = 0; i < 3; ++i)
		arr.at(i).resize(4);
	InVector(arr, 3, 4);
	OutVector(arr);
	system("pause");
	return 0;
}
6 Likes

em hay dùng system(“pause>nul”); hơn :joy::joy::joy::joy:

cho minh hoi sao lai khai bao
int columns =arrr.at(0).size();

Để đem ra for :slight_smile: trường hợp lặp tất cả thì nên dùng foreach.

1 Like

Cho em hỏi là cái setw(5) có ý nghĩa là gì ạ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?