Mã của tôi là nghĩa vụ phải đọc trong một tập tin văn bản và có nhiều chủ đề xem xét thông qua các phần khác nhau của dòng cho palindrome dài nhất. Kích thước của đoạn (bao nhiêu dòng) được xác định bởi một số biến chủ đề được truyền vào như một đối số. Tệp văn bản gốc được lưu trữ trong một std :: vector trong đó mỗi chỉ mục của vectơ tương ứng với tệp gốc.basic_string :: _ M_construct null không hợp lệ sau khi xây dựng subvector của các chuỗi
Khi tôi chuyển đoạn con của thư mục con để tìm PayPal(), tôi nhận được 'C++ basic_string :: _ M_construct null không hợp lệ' và tôi không thể hiểu tại sao. Không có chuỗi nào của tôi phải là NULL.
Khi tôi vượt qua các dòng vectơ ban đầu, tôi không nhận được lỗi nào vì vậy tôi giả định rằng nó phải liên quan đến cách tôi tạo trình con.
Dưới đây là mã của tôi:
Result longestPalindrome(std::string str)
{
int maxLength = 1; // The result (length of LPS)
int start = 0;
int len = str.size();
int low, high;
// One by one consider every character as center point of
// even and length palindromes
for (int i = 1; i < len; ++i)
{
// Find the longest even length palindrome with center points
// as i-1 and i.
low = i - 1;
high = i;
while (low >= 0 && high < len && str[low] == str[high])
{
if (high - low + 1 > maxLength)
{
start = low;
maxLength = high - low + 1;
}
--low;
++high;
}
// Find the longest odd length palindrome with center
// point as i
low = i - 1;
high = i + 1;
while (low >= 0 && high < len && str[low] == str[high])
{
if (high - low + 1 > maxLength)
{
start = low;
maxLength = high - low + 1;
}
--low;
++high;
}
}
Result result = {0, 0, 0};
return result;
}
void findPalindome(std::vector<std::string> chunk, Result& result)
{
Result localLargest = {0,0,0};
for (unsigned int i = 0; i < chunk.size(); i++)
{
Result loopLargest = longestPalindrome(chunk[i]);
if (localLargest < loopLargest)
{
localLargest = loopLargest;
}
}
result = localLargest;
}
Result
FindPalindromeStatic(Lines const& lines, int numThreads)
{
std::vector<Result> results(numThreads, {0,0,0});;
int chunkSize = lines.size()/numThreads; //lines is the original vector with all the lines in the file
std::vector<std::thread> threads;
int counter = 0;
for (int i = 0; i < numThreads; i++)
{
std::vector<std::string>::const_iterator begin = lines.begin() + counter;
std::vector<std::string>::const_iterator end = lines.begin() + ((i + 1) * chunkSize);
std::vector<std::string> chunk(begin, end);
threads.emplace_back(&findPalindome, std::ref(chunk), std::ref(results[i]));
counter = ((i+1)*chunkSize);
}
for (int i = 0; i < numThreads; i++)
{
threads[i].join();
}
Result x = {0,0,0};
return x;
}
Bất kỳ trợ giúp sẽ được đánh giá cao và đây là chồng đầu tiên của tôi câu hỏi rất xin lỗi vì bất kỳ sai lầm.
Cảm ơn bạn rất nhiều! Điều đó là vậy đó! – schwingms
Bạn được chào đón. Cách giải quyết đơn giản là có một vectơ các vectơ chunk được khai báo trước vòng lặp. –