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

c
c++

(Người bí ẩn) #1

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:


(Từ Gia Lộc) #2

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


(Người bí ẩn) #3

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;
}

(Nhân Nguyễn) #4

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


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