30/09/2018, 16:18

Sử dụng vector bị lỗi: vector subscript out of range?

Mycode

/*mo file input.txt tim max trong day so nguyen.txt*/
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;
int main(){
	//mo file de doc
	ifstream FileIn("INPUT.TXT");

	if (!FileIn){
		cout << "Khong tim thay tap tin INPUT.TXT" << endl;
		system("pause");
		return 0;
	}

	vector<int> arr;
	int SoLuong;
	FileIn >> SoLuong;
	for (int i = 1; i <= SoLuong; i++){
		int x;
		FileIn >> x;
		arr.push_back(x);
	}
	FileIn.close();


	ofstream FileOut("OUTPUT.TXT");
	int max = arr[0];
	for (int i = 1; i <= arr.size(); i++){
		if (arr[i] > max){
			max = arr[i];
		}
	}
	FileOut << max;
	FileOut.close();
	system("pause");
	return 0;
}

Nguyễn Minh Dũng viết 18:31 ngày 30/09/2018

Đọc lỗi này thì thấy là cách @tuantien8979 sử dụng vector bị sai. Sai ở chỗ là đã trỏ nhầm ra ngoài phạm vi của vector. Khi nào mình thấy chữ out of range là tự hiểu thế nhé.

Đọc vào code thì thấy thế này:

for (int i = 1; i <= arr.size(); i++)
{
    if (arr[i] > max)
    {
        max = arr[i];
    }
}

Sai ở chỗ:

i <= arr.size()

Sửa lại

i < arr.size()

Tuy nhiên cách dùng này không nên áp dụng đối với vector nhé. Hãy dùng iterator để code. @tuantien8979 xem các video về vector để hiểu cách dùng

Đăng ký khóa học C++ cơ bản 2016 ( NEW ) tại đây : Thông tin về khóa học xem tại đây : -Sự khác biệt giữa 2 khóa học cũ và mới : +Khóa học C++ cơ bản 2016 là khóa học mới, được đầu tư nhiều hơn từ nội dung, phương pháp học, cách học hiệu quả. +Trong khóa học còn có nhiều kiến thức mới như thực hành trên HackerRank, thực hành trên Codefights và Đạt nghĩ mọi người nên học khóa học mới, bởi vì đây là kiến thức mới, phù hợp với hiện tại..... Mặt khác âm thanh cũng tốt hơn nhiều so với khóa học …

Đăng ký khóa học C++ cơ bản 2016 ( NEW ) tại đây : Thông tin về khóa học xem tại đây : -Sự khác biệt giữa 2 khóa học cũ và mới : +Khóa học C++ cơ bản 2016 là khóa học mới, được đầu tư nhiều hơn từ nội dung, phương pháp học, cách học hiệu quả. +Trong khóa học còn có nhiều kiến thức mới như thực hành trên HackerRank, thực hành trên Codefights và Đạt nghĩ mọi người nên học khóa học mới, bởi vì đây là kiến thức mới, phù hợp với hiện tại..... Mặt khác âm thanh cũng tốt hơn nhiều so với khóa học …

Đăng ký khóa học C++ cơ bản 2016 ( NEW ) tại đây : Thông tin về khóa học xem tại đây : -Sự khác biệt giữa 2 khóa học cũ và mới : +Khóa học C++ cơ bản 2016 là khóa học mới, được đầu tư nhiều hơn từ nội dung, phương pháp học, cách học hiệu quả. +Trong khóa học còn có nhiều kiến thức mới như thực hành trên HackerRank, thực hành trên Codefights và Đạt nghĩ mọi người nên học khóa học mới, bởi vì đây là kiến thức mới, phù hợp với hiện tại..... Mặt khác âm thanh cũng tốt hơn nhiều so với khóa học …

Nguyễn Tuấn Tiến viết 18:27 ngày 30/09/2018

Để em xem rùi làm lại bài này

Nguyễn Minh Dũng viết 18:27 ngày 30/09/2018

Nếu sửa theo cách của anh thấy đúng thì nhớ chọn câu trả lời của anh là đúng nhé @tuantien8979

Em có ý kiến thêm chức năng kiểm tra bài viết thế này. Chủ topic lập topic, mọi người vào trả lời, nếu chủ topic cảm thấy nhận được câu trả lời thích hợp cho bản thân thì nhấn vào cái gì đó để đóng bài viết, và tiêu đề bài viết sẽ đổi màu chữ hoàn thành yêu cầu bài viết. Nếu bài viết vẫn chưa có câu trả lời thì sẽ được đưa lên trên khi người post yêu cầu đến khi nào nhận được câu trả lời.
Bài liên quan
0