30/09/2018, 16:27
Vector Trong C++
Chào mọi người .
Em là Học
Hôm nay em xin trình bày vấn đề em gặp phải trong lúc code mà sửa hoài không ra .
Đây là code của em.
#include <iostream>
#include <vector>
#include <conio.h>
using namespace std;
void capphat(vector<vector<int>> &a , int sodong ,int socot)
{
a.resize(sodong);
for( int i = 0 ; i < a.size() ; i++)
{
a[i].resize(socot);
}
}
void nhap(vector<vector<int>> &a)
{
for( int i = 0 ; i < a.size() ; i++)
{
for( int j = 0 ; j < a[i].size(); j++)
{
cout << "A["<<i<<"]["<<j<<"]= ";
cin >> a[i][j];
}
}
}
void xuat(vector<vector<int>> a)
{
for( int i = 0 ; i < a.size(); i++)
{
for( int j = 0 ; j < a[i].size() ; j++)
cout << a[i][j] << " ";
cout << endl;
}
}
void HuyBo(vector<vector<int>> a)
{
for(int i = 0 ; i < a.size() ; i++)
{
a[i].clear();
}
a.clear();
}
bool MAX(int a,int b)
{
return a > b;
}
bool MIN(int a,int b)
{
return a < b;
}
int Timkiem(vector<vector<int>> a , bool (*p)(int ,int ) )
{
int sosanh = a[0][0];
for(int i = 0 ; i < a.size(); i++)
{
for( int j = 0 ; j < a[i].size(); j++ )
{
if( p(sosanh,a[i][j]) )
sosanh = a[i][j];
}
}
return sosanh;
}
void XoaDong(vector<vector<int>> &a, int vitridongcanxoa)
{
for( int i = vitridongcanxoa ; i < a.size() - 1 ; i++)
{
for( int j = 0 ; j < a[i].size(); j++)
{
a[i][j] = a[i+1][j];
}
}
a[vitridongcanxoa + 1].clear();
a.resize(a.size() - 1);
}
void XoaCot(vector<vector<int>> &a, int vitricotcanxoa)
{
for( int i = vitricotcanxoa ; i < a[i].size() - 1 ; i++)
{
for( int j = 0 ; j < a.size(); j++)
{
a[j][i] = a[j][i+1];
}
}
for( int i = 0 ; i < a.size() ; i++)
{
a[i].resize(a[i].size() - 1);
}
}
void main()
{
vector<vector<int>> a;
int sodong,socot;
cout << "Nhap So Dong: ";
cin >> sodong;
cout << "Nhap So Cot : ";
cin >> socot;
capphat(a,sodong,socot);
nhap(a);
xuat(a);
cout << "
GiaTri Lon Nhat Trong Mang La: " << Timkiem(a,MIN);
cout << "
GiaTri Nho Nhat Trong Mang La: " << Timkiem(a,MAX);
cout << "
Xoa Dong ";
int xoadong;
cout << "Nhap Vi Tri Dong Muon Xoa: ";
cin >> xoadong;
XoaDong(a,xoadong);
xuat(a);
cout <<"a";
cout << "
Xoa Cot ";
int xoacot;
cout << "Nhap Vi Tri Cot Muon Xoa: ";
cin >> xoacot;
XoaCot(a,xoacot);
xuat(a);
cout <<"a";
HuyBo(a);
getch();
}
code Khá Dài nên mọi người thông cảm .
em gặp vấn để ở 2 hàm sau đây .
void XoaDong(vector<vector<int>> &a, int vitridongcanxoa)
{
for( int i = vitridongcanxoa ; i < a.size() - 1 ; i++)
{
for( int j = 0 ; j < a[i].size(); j++)
{
a[i][j] = a[i+1][j];
}
}
a[vitridongcanxoa + 1].clear();
a.resize(a.size() - 1);
}
void XoaCot(vector<vector<int>> &a, int vitricotcanxoa)
{
for( int i = vitricotcanxoa ; i < a[i].size() - 1 ; i++)
{
for( int j = 0 ; j < a.size(); j++)
{
a[j][i] = a[j][i+1];
}
}
for( int i = 0 ; i < a.size() ; i++)
{
a[i].resize(a[i].size() - 1);
}
}
Khi em chỉ gọi 1 hàm thì nó lại làm đúng.
nhưng khi em gọi và thực hiện 2 hàm trên cùng 1 lúc thì nó đột nhiên trong lúc chạy nó báo lỗi ( theo em thì lỗi đó là Suy suất bộ nhớ sai ) .Mọi người có thể chạy thử code ở trên
- Em nghĩ là em sai ở chỗ lúc mà em cập nhật lại bộ nhớ nhưng sửa hoài ko ra .
Mong mọi người giúp em
Em xin cảm ơn mọi người đã xem topic này của em.
Bài liên quan
Hàm xoaDong ban chuyển các dòng sau dịch lên rồi sau đó lại clear dongcanxoa+1 là không đúng. Bạn đã chuyển các dòng sau lên thì bây giờ dòng cuối không còn mang ý nghĩa. Bạn nên xoá dòng này mới đúng. Cụ thể:
Lỗi truy xuất bộ nhớ là do dòng dongcanxoa+1 có 0 phần tử. Do đã bị clear
Sửa lại:
… Đoạn code dịch lên 1 ô…
đoạn này cũng tương tự như xoá cột.
tốt hơn bạn nên dùng hàm erase có sẵn: