01/10/2018, 13:43

Mảng 2 chiều trong vai trò tham số

Mọi người cho mình hỏ có cách nào để nhập 1 số vào biến rồi biến số đó thành const ko ?
VD:
int a;
cin >> a; // Rồi làm cách nào để có thể cho a thành hằng số vs số mình vừa nhập xong

Mình đang bí đoạn Mảng 2 chiều, VS nó bắt phần tử nhập vào phải là hằng số (int a =3) thì nó mới cho làm việc vs mảng
Mà mình lại muốn nhập tùy ý số lượng phần tử thông qua người dùng: int a; cin >> a; arr[a];
Có cao nhân nào vào chỉ giúp mình với
Cảm ơn mọi người ^^

rogp10 viết 15:47 ngày 01/10/2018

Mà mình lại muốn nhập tùy ý số lượng phần tử thông qua người dùng: int a; cin >> a; arr[a];

p = new int[a]; dùng new[] xong phải delete[].

Dark.Hades viết 15:51 ngày 01/10/2018

Mọi người cho mình hỏ có cách nào để nhập 1 số vào biến rồi biến số đó thành const ko ?

Đơn giản là gán giá trị nó bằng một hàm:

auto smt = [](){ 
  return 10;
};
const int a = smt();
Quang viết 15:46 ngày 01/10/2018
#include <iostream>

int constWidth()
{
	int w;	std::cin >> w;
	return w;
}

void main()
{
	const int width = constWidth();

	width = 2;			// O tren thi dung la const
	int arr[width];		// O duoi thi no lai khong phai la const -_-

	system("pause");
}
Dark.Hades viết 15:48 ngày 01/10/2018

Làm theo #2 đi nhé.
Trick này làm tốn thời gian mà không hiệu quả

viết 15:44 ngày 01/10/2018

có trick khác nè:

#include <vector>

vector<int> arr(a); //mảng 1 chiều
vector<vector<int>> mat(a, vector<int>(b)); //mảng 2 chiều a dòng b cột

hoặc thấy nó nhiều <> quá thì

#include <vector>
using IntVec = std::vector<int>;
using IntMat = std::vector<IntVec>;

IntVec arr(a);
IntMat mat(a, IntVec(b));

IntMat func(const IntMat& mat, const IntVec& arr) //tha hồ truyền vào hàm số dễ như truyền double hay int
{
    mat.size() //số dòng của mat
    mat[0].size() //số cột của mat
    mat[1][2] //phần tử dòng thứ 2, cột thứ 3 trong mat
}

trick này ko có thằng Jedi nào trong trường dạy em đâu, phang vào cho nó shock!

Trần Hoàn viết 15:57 ngày 01/10/2018

Thường thì người ta dùng con trỏ để tạo mảng động

Mảng 1 chiều: (Khởi tạo một biến kiểu int* dưới dạng int[])

cin >> n;
int* a = new int[n];

Mảng chứa mảng (thường gọi là mảng 2 chiều): Mỗi phần tử của mảng a là một mảng

cin >> m >> n;
int** a = new int*[m]//Khởi tạo biến kiểu int** dưới dạng int*[], mỗi phần tử đều có kiểu int*)
for (int i = 0; i < m; i += 1)
	a[i] = new int[n];//Khai báo mỗi phần tử của a là một mảng 1 chiều)

Việc sử dụng delete như thế nào, bạn tự nghiên cứu tiếp.

Quang viết 15:56 ngày 01/10/2018

thks moi nguoi nhieu

Trần Hoàn viết 15:44 ngày 01/10/2018

Thực ra thì mình đưa bạn cách sử dụng con trỏ khởi tạo thành mảng vì bạn hỏi cách tạo mảng thôi. Chứ khi dùng C++ thì bạn nên dùng std::vector theo cách của @tntxtnt,không dùng mảng.

Bài liên quan
0