vector初始化不正确,不知此处应如何修改
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> text{1,2,3,4,5,6,7,8,9,10};
int sought;
cout << "What number are you seeking? " << endl;
cin >> sought;
auto beg = text.begin(), end = text.end();
auto mid = text.begin() + (end-beg)/2;
while (mid != end && *mid != sought)
{
if (sought < *mid){
end = mid;
}else{
beg = mid + 1;
}
mid = beg = (end - beg)/2;
}
return 0;
}
[解决办法]
vector是没有类似数组的直接初始化方法的。常用的初始化方法有三种:
1. for循环
for(int i = 1; i <= 10; ++i)
text.push_back(i);
这种方法效率比较低,也不容易处理数据不连续的情况
2. 从数组中初始化
int arr[] = {1,2,3,4,5,6,7,8,9,10};
vector<int> text(arr, arr + sizeof(arr)/sizeof(int));
直观,而且可以通过直接修改数组来修改vector。效率也比较高,不过浪费一个临时变量空间
3. 使用boost库
#include <boost/assign.hpp>
int main(){
using namespace boost::assign;
vector<int> text;
text += 1,2,3,4,5,6,7,8,9,10;
}
直观且方便修改,效率也高,也不用浪费临时变量空间。不过需要用到boost库
[解决办法]
c++11语法,vs2012不支持uniform initialization,2012之前的更不用说了。
vs2012安装了ctp更新了工具集就支持了。但是stl没升级所以还是不能用。。。。
3楼已经概括了现在常用的方法了