C++ warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 return {i,j}
C++ vector return{} 返回错误
在解答LeetCode两数之和的题目使用{}返回vector出现了错误
部分源代码
int array1[4] = {2,7,11,15};
int array2[3] = {3,2,4};
int array3[2] = {3,3};
int target1 = 9;
int target2 = 6;
int target3 = 6;
Solution s;
vector<int> nums1(array1,array1 + 4);
vector<int> result = s.twoSum(nums1,target1);
cout << "[" << result[0] << "," << result[1] << "]" << endl;
vector<int> nums2(array2,array2 + 3);
result = s.twoSum(nums2,target2);
cout << "[" << result[0] << "," << result[1] << "]" << endl;
vector<int> nums3(array3,array3 + 2);
result = s.twoSum(nums3,target3);
cout << "[" << result[0] << "," << result[1] << "]" << endl;
错误警告
In member function 'std::vector Solution::twoSum(std::vector&, int)':
warning: extended initializer lists only available with -std=c++11 or -std=gnu++11
return {i,j};
^
warning: extended initializer lists only available with -std=c++11 or -std=gnu++11
return {};
^
在成员函数“std::vector Solution::twoSum(std::vector&,int)”中:
警告:扩展初始值设定项列表仅适用于-std=c++11或-std=gnu++11
返回{i,j};
警告:扩展初始值设定项列表仅适用于-std=c++11或-std=gnu++11
返回{};
这个错误的原因是C++11新特性的问题
具体是由于新特性之中initializer_list构造且初始化的vector所出的问题
详情参见文章链接: C++如何实现用大括号初始化vector.
而解决方法则是使用迭代器遍历发现值或使用指针
具体代码如下
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int n = nums.size();
int i, j;
for (i = 0; i < n; ++i) {
for (j = i + 1; j < n; ++j) {
//target-num[i] == num[j]
if (nums[i] + nums[j] == target) {
return {i,j};
}
}
}
return {};
}
};
int main()
{
int array1[4] = {2,7,11,15};
int array2[3] = {3,2,4};
int array3[2] = {3,3};
int target1 = 9;
int target2 = 6;
int target3 = 6;
Solution s;
vector<int> nums1(array1,array1 + 4);
vector<int> result = s.twoSum(nums1,target1);
for(vector<int>::iterator iter = result.begin(); iter != result.end(); iter++)
cout << " " << *iter << " " << endl;
vector<int> nums2(array2,array2 + 3);
result = s.twoSum(nums2,target2);
cout << "[" << *result.begin() << "," << *(result.begin()+1) << "]" << endl;
vector<int> nums3(array3,array3 + 2);
result = s.twoSum(nums3,target3);
cout << "[" << *result.begin() << "," << *(result.begin()+1) << "]" << endl;
return 0;
}