vector的stl vector 元素个数数是否有所限制(不考虑硬件

乱世,当辅明君,以养四海之民;盛世,当精己业,共筑中华之梦!!!——
欢迎各位IT技术爱好者加入技术交流群 :。集思广益,共同进步!...
C++vector的使用总结及常用vector操作
一、C++ vector类为内置数组提供了一种替代表示,与string类一样 vector 类是随标准 C++引入的标准库的一部分,使用时需包含头文件:
#include &vector&
二、C++ vector类有两种使用方式:
第一种:STL方式
vector& string &
1. 我们向 vector 中插入元素,而不再是索引元素,以及向元素赋值,例如 push_back()操作,就是在 vector 的后面插入一个元素下面的 while 循环从标准输入读入一个字符串序列并每次将一个字符串插入到 vector 中
while ( cin && word ) {
text.push_back( word );
虽然我们仍可以用下标操作符来迭代访问元素
cout && "words read are: \n";
for ( int ix = 0; ix & text.size(); ++ix )
cout && text[ ix ] && ' ';
但是 更典型的做法是使用vector 操作集中的begin()和 end()所返回的迭代器 iterator
cout && "words read are: \n";
for ( vector&string&::iterator it = text.begin();
it != text.end(); ++it )
cout && *it&& ' ';
cout && endl
iterator 是标准库中的类,它具有指针的功能
对迭代器解引用,并访问其指向的实际对象
向前移动迭代器 it 使其指向下一个元素
2. 注意 不要混用这两种习惯用法, 例如,下面的定义
vector& int &
定义了一个空vector 再写这样的语句
ivec[ 0 ] = 1024;
就是错误的 ,因为 ivec 还没有第一个元素,我们只能索引 vector 中已经存在的元素 size()操作返回 vector 包含的元素的个数。
3. 类似地 当我们用一个给定的大小定义一个vector 时,例如
vector&int& ia( 10 );
任何一个插入操作都将增加vector 的大小,而不是覆盖掉某个现有的元素,这看起来好像是很显然的,但是下面的错误在初学者中并不少见:
const int size = 7;
int ia[ size ] = { 0, 1, 1, 2, 3, 5, 8 };
vector& int & ivec( size );
for ( int ix = 0; ix & ++ix )
ivec.push_back( ia[ ix ]);
程序结束时ivec 包含 14 个元素, ia 的元素从第八个元素开始插入。
第二种:类数组使用
1. 定义一个已知长度的 vector :
vector& int & ivec( 10 );
//类似数组定义int ia[10 ];
可以通过ivec[索引号] 来访问元素
使用 if ( ivec.empty() ) 判断是否是空,ivec.size()判断元素个数。
2. vector的元素被初始化为与其类型相关的缺省值:算术和指针类型的缺省值是 0,对于class 类型,缺省值可通过调用这类的缺省构造函数获得,我们还可以为每个元素提供一个显式的初始值来完成初始化,例如
vector& int & ivec( 10, -1 );
定义了 ivec 它包含十个int型的元素每个元素都被初始化为-1
对于内置数组我们可以显式地把数组的元素初始化为一组常量值,例如:
int ia[ 6 ] = { -2, -1, 0, 1, 2, 1024 };
我们不能用同样的方法显式地初始化 vector ,但是可以将 vector 初始化为一个已有数组的全部或一部分,只需指定希望被用来初始化 vector 的数组的开始地址以及数组最末元的下一位置来实现,例如:
// 把 ia 的 6 个元素拷贝到 ivec 中
vector& int & ivec( ia, ia+6 );
被传递给ivec 的两个指针标记了用来初始化对象的值的范围,第二个指针总是指向要拷贝的末元素的下一位置,标记出来的元素范围也可以是数组的一个子集,例如 :
// 拷贝 3 个元素 ia[2],ia[3], ia[4]
vector& int & ivec( &ia[ 2 ], &ia[ 5 ] );
3. 与内置数组不同 vector 可以被另一个 vector 初始化或被赋给另一个 vector 例如
vector& string &
void init_and_assign()
// 用另一个 vector 初始化一个 vector
vector& string & user_names( svec );
// 把一个 vector 拷贝给另一个 vector
svec = user_
三、vector使用总结:
1.vector的初始化:可以有五种方式,举例说明如下:
(1) vector&int& a(10); //定义了10个整型元素的向量(尖括号中为元素类型名,它可以是任何合法的数据类型),但没有给出初值,其值是不确定的。
(2)vector&int&a(10,1); //定义了10个整型元素的向量,且给出每个元素的初值为1
(3)vector&int&a(b); //用b向量来创建a向量,整体复制性赋值
(4)vector&int&a(b.begin(),b.begin+3); //定义了a值为b中第0个到第2个(共3个)元素
(5)intb[7]={1,2,3,4,5,9,8};vector&int& a(b,b+7); //从数组中获得初值
2.vector对象的几个重要操作,举例说明如下:
(1)a.assign(b.begin(), b.begin()+3);//b为向量,将b的0~2个元素构成的向量赋给a
(2)a.assign(4,2);//是a只含4个元素,且每个元素为2
(3)a.back();//返回a的最后一个元素
(4)a.front();//返回a的第一个元素
(5)a[i]; //返回a的第i个元素,当且仅当a[i]存在
(6)a.clear();//清空a中的元素
(7)a.empty();//判断a是否为空,空则返回ture,不空则返回false
(8)a.pop_back();//删除a向量的最后一个元素
(9)a.erase(a.begin()+1,a.begin()+3);//删除a中第1个(从第0个算起)到第2个元素,也就是说删除的元素从a.begin()+1算起(包括它)一直到a.begin()+3(不包括它)
(10)a.push_back(5);//在a的最后一个向量后插入一个元素,其值为5
(11)a.insert(a.begin()+1,5);//在a的第1个元素(从第0个算起)的位置插入数值5,如a为1,2,3,4,插入元素后为1,5,2,3,4
(12)a.insert(a.begin()+1,3,5);//在a的第1个元素(从第0个算起)的位置插入3个数,其值都为5
(13)a.insert(a.begin()+1,b+3,b+6);//b为数组,在a的第1个元素(从第0个算起)的位置插入b的第3个元素到第5个元素(不包括b+6),如b为1,2,3,4,5,9,8,插入元素后为1,4,5,9,2,3,4,5,9,8
(14)a.size();//返回a中元素的个数;
(15)a.capacity();//返回a在内存中总共可以容纳的元素个数
(16)a.rezize(10);//将a的现有元素个数调至10个,多则删,少则补,其值随机
(17)a.rezize(10,2);//将a的现有元素个数调至10个,多则删,少则补,其值为2
(18)a.reserve(100);//将a的容量(capacity)扩充至100,也就是说现在测试a.capacity();的时候返回值是100.这种操作只有在需要给a添加大量数据的时候才 显得有意义,因为这将避免内存多次容量扩充操作(当a的容量不足时电脑会自动扩容,当然这必然降低性能)
(19)a.swap(b);//b为向量,将a中的元素和b中的元素进行整体性交换
(20)a==b; //b为向量,向量的比较操作还有!=,&=,&=,&,&
3.顺序访问vector的几种方式,举例说明如下:
1、向向量a中添加元素
vector&int&
for(int i=0;i&10;i++)
a.push_back(i);2、也可以从数组中选择元素向向量中添加
int a[6]={1,2,3,4,5,6};
vector&int& b;
for(int i=1;i&=4;i++)
b.push_back(a[i]);3、也可以从现有向量中选择元素向向量中添加int a[6]={1,2,3,4,5,6};
vector&int&
vector&int& c(a,a+4);
for(vector&int&::iterator it=c.begin();it&c.end();it++)
b.push_back(*it);4、也可以从文件中读取元素向向量中添加
ifstream in("data.txt");
vector&int&
for( in&&i)
a.push_back(i);5、易犯错误
vector&int&
for(int i=0;i&10;i++)
//这种做法以及类似的做法都是错误的。下标只能用于获取已存在的元素,而现在的a[i]还是空的对象(2)从向量中读取元素1、通过下标方式读取int a[6]={1,2,3,4,5,6};
vector&int& b(a,a+4);
for(int i=0;i&=b.size()-1;i++)
cout&&b[i]&&" ";2、通过遍历器方式读取
int a[6]={1,2,3,4,5,6};
vector&int& b(a,a+4);
for(vector&int&::iterator it=b.begin();it!=b.end();it++)
cout&&*it&&" ";四、几种重要的算法,使用时需要包含头文件:#include&algorithm&(1)sort(a.begin(),a.end()); //对a中的从a.begin()(包括它)到a.end()(不包括它)的元素进行从小到大排列(2)reverse(a.begin(),a.end()); //对a中的从a.begin()(包括它)到a.end()(不包括它)的元素倒置,但不排列,如a中元素为1,3,2,4,倒置后为4,2,3,1(3)copy(a.begin(),a.end(),b.begin()+1); //把a中的从a.begin()(包括它)到a.end()(不包括它)的元素复制到b中,从b.begin()+1的位置(包括它)开始复制,覆盖掉原有元素(4)find(a.begin(),a.end(),10); //在a中的从a.begin()(包括它)到a.end()(不包括它)的元素中查找10,若存在返回其在向量中的位置五、其它使用举例:
(1)把一个vector中元素追加到另外一个容器vector,示例程序如下:
#include &vector&
#include &iostream&
template &typename type& void printvector(std::vector&type& const &v, std::ostream &os = std::cout)
for (typename std::vector&type&::size_type sz = 0; sz != v.size(); ++sz)
os && v[sz] && " ";
os && std::
int main()
int a[5] = {1, 2, 3, 4, 5};
std::vector&int& v1(a, a + 3), v2(a + 3, a + 5);
printvector(v1); // 结果是1 2 3
printvector(v2); // 结果是4 5
v1.insert(v1.end(), v2.begin(), v2.end()); // 把v2加到v1末尾
printvector(v1); // 结果是1 2 3 4 5
(2)类和结构体存vector入实例:由于vector只允许一个占位,所以才将struct塞进vector,以弥补vector的不足。
#include "stdafx.h"
#include &vector&
#include &string&
class AClass
struct AStruct
void TestStruct()
//类的使用
AClass Ac;
vector&AClass&
Ac.num=10;
Ac.name="name";
vc.push_back(Ac);
for (vector&AClass&::iterator it=vc.begin();it&vc.end();++it)
cout&&d.num&&
//结构体的使用
AStruct As;
vector&AStruct&
As.num=10;
As.name="name";
vs.push_back(As);
for (vector&AStruct&::iterator it=vs.begin();it&vs.end();++it)
cout&&ds.num&&
void TestPoint()
//类的使用
AClass *Ac=new AC
vector&AClass *&
Ac-&num=10;
Ac-&name="name";
vc.push_back(Ac);
AClass *d;
for (vector&AClass*&::iterator it=vc.begin();it&vc.end();++it)
cout&&d-&num&&
int _tmain(int argc, _TCHAR* argv[])
TestStruct();
TestPoint();
(3)C++中将两个vector中的值整合到另一个vector中,vecB和vecA中有相同的struct个数,现在想将每个vecA中的每个a的值传给vecC中c1,每个vecB中的每个b的值传给vecC中c2,也就是将两个容器中的内容整合到新的容器C中
vector&A& vecA;
vector&B& vecB;
vector&C& vecC;
容器C和A、B中元素类型不同,迭代器类型就不同,所以不能用容器算法,使用迭代器遍历赋值,合并代码如下:第一种方法:for(vecA::const_iterator itA = vecA.begin(), VecB::const_iterator itB = vecB.begin();
itA != vecA.end() && itB != vecB.end(); itA++, itB++){
c.c1 = (*itA).a;
c.c2 = (*itB).b;
vecC.push_back(c);
}第二种方法:void MergeVector(vector&A& &vectorA,vector&B& &vectorB,vector&C& &vectorC)
vector&A&::
vector&B&::
vector&C&::
pva = vectorA.begin();
pvb = vectorB.begin();
pvc = vectorC.begin();
while(pva!=vectorA.end())
*pvc-&c1 = *pva-&a;
*pvc-&c2 = *pvb-&b;
}(4)建立两个int类型的向量vector,利用merge算法合并,再用sort算法对合并后算法排序#include &iostream&
#include &vector&
#include &algorithm&
vector&int& merge(vector&int& ,vector&int& );
int main()
vector&int& v1;
v1.push_back(4);
v1.push_back(6);
v1.push_back(2);
vector&int& v2;
v2.push_back(3);
v2.push_back(1);
v2.push_back(5);
vector&int& v3=merge(v1,v2);
sort(v3.begin(),v3.end());
for(vector&int&::iterator it=v3.begin();it!=v3.end();++it){
cout&&*it&&
vector&int& merge(vector&int& v1,vector&int& v2)
v1.insert(v1.end(),v2.begin(),v2.end());
return v1;
扫码向博主提问
非学,无以致疑;非问,无以广识
擅长领域:
C/C++应用开发
Linux 应用开发
互联网金融
大数据开发
没有更多推荐了,C++中有什么好的方法取得vector容器倒数第二个元素?_百度知道
C++中有什么好的方法取得vector容器倒数第二个元素?
以前没有在意过这个问题,总是随手写一个,最近发现在1000多次左右的循环中,不同的取得vector容器倒数第二个元素的耗时明显不同。
暂时发现int mySize = vec.size();vec.at(mySize -2);比*(vec.end() - 2)快很多,不知道还有什么高效的方法取得vector容器倒数...
我有更好的答案
基本上就你的这两种方法了,至于效率的问题,上面的答案看起来都有一定的道理,但到底哪一个对呢?或者都对?实践是检验真理的标准。测试一下就知道了。#include &iostream&#include &iomanip&#include &Windows.h&#include &vector&#include &functional&int getbyindex(vector&int&& v){
//int n = v.size();
return v[v.size()-2];}int getbyit(vector&int&& v){
return *(v.end()-2);}double calltime(function&int(vector&int&&)& f,vector&int&& v){
LARGE_INTEGER
if (::QueryPerformanceCounter(&start) == FALSE)
throw &foo&;
LARGE_INTEGER
if (::QueryPerformanceCounter(&end) == FALSE)
throw &foo&;
return static_cast&double&(end.QuadPart - start.QuadPart);}int main(){
vector&int&
for(int i = 0;i&100;++i)
v.push_back(rand());
double t = calltime(getbyindex,v);
cout&&setprecision(10)&&t&&
return 0;}大致的测试结果是,getbyindex要快一些。对于vector容器而言,采用index的方法,更加接近其实现底层——数组——的本质,自然有更快的理由。
采纳率:94%
来自团队:
迭代器么,也不难的啊
为您推荐:
其他类似问题
vector的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。&figure&&img src=&https://pic1.zhimg.com/50/6afae0f764cabbb64d42d0_b.jpg& data-rawwidth=&506& data-rawheight=&407& class=&origin_image zh-lightbox-thumb& width=&506& data-original=&https://pic1.zhimg.com/50/6afae0f764cabbb64d42d0_r.jpg&&&/figure&马里奥碰到花朵就变身。&br&&br&什么是马里奥?一个装着 16 × 32 个小色块的长方形,其中一些色块填着颜色,另一些没有。什么是花?一个 16 × 16 的正方形。什么是「变身」?把马里奥这个方块里面代表衣服的褐色变成红色,代表背带裤的红色变成白色。什么是褐色?暂且说它是 0x887000 这个数字。什么是「碰到」?马里奥的长方形与花朵的正方形有所重叠。什么是「重叠」?假设马里奥的这个方块占据屏幕(什么是屏幕?一个能装下 256 × 240 个小色块的矩形)中 X 方向 101 到 116、Y 方向 21 到 52 之间的区域,那么只要这个区域内有一点或更多点也被花朵所占据(比如花朵处在 X 116 到 131、Y 21 到 36 之间的区域内),我们就认为两者有所重叠。&br&&br&若给定以八个数值代表的两个矩形区域,请写出判断两个区域是否有重叠的 C 语言程序。如果你能写出来,那么祝贺你,如果有朝一日你想自己用 C 做一遍 NES 版本的《超级马里奥》,你至少知道让他变身需要做什么了。&br&&br&是的,C 语言也许「只能」做数学题。可是,绝大多数游戏的运行过程就是不停地做数学题,而所谓编写游戏,也就是把游戏的规则和游戏的效果转化为数学题而已。其中不少题目电脑都已经知道怎么解——是别的程序员事先告诉它的——比如「求一堆散落在三维直角座标系之中的多面体在 8(x-3)-10(y+1)-11(z-1)=0 这个平面上一个给定范围内的投影」或者「给定一些彼此相连的顶点,求任意两点之间的最短路径」之类的数学题,它只需要千万分之一秒就能给你解好。这种能力有什么用?电脑上 FPS 游戏的本质活动就是不停地求三维座标系下的多面体经过变换之后在二维平面上的投影,不停地判断两个多面体是否彼此重叠,以及不停地寻找两个顶点之间的最短路径,最终达到让怪物冲到你面前咬你一口的目的。不止游戏如此,其他软件也都差不多,每一个细节都是某种数学题——比如知乎页面顶端的蓝色导航条背景,就是 CSS 描述的一个浅蓝到深蓝的渐变——渐变是怎么回事呢?给出两个数字分别代表两种颜色,以及第三个数字代表一段距离,求一系列颜色的数值以及次序,使得这段距离中两种相邻颜色之间的变化最小。数学题。别说 C 语言,一切编程语言最终都只能做数学题,根据给定的数据,算出另一些数据,算出更多的数据,然后存贮、发送或者呈现算出的数据。&br&&br&不过我能理解你的困惑。投入大量时间看完教程,结果只能在黑框里输出一串数字。这是在学编程还是在向七十年代致敬?编程是这样无法给人成就感的活动吗?是,也不是。看你的表述,应该不是小孩子了,因为小孩子不会因为初学编程能做的事情很少而没有成就感,或者说,觉得这样做没有成就感的小孩子根本不会继续学下去。最初学编程的成就感单纯来自于「我居然可以指挥机器做一些事」,至少我小时候用中华学习机编一个程序帮我算暑假作业上的四则运算题时是这样感觉的。写出这些程序并用它解题虽然远比自己动笔去把题目算出来费时,却让人乐此不疲。那时候我还不知道马里奥碰到花会变身这种事情其实也是靠编程编出来,所以我也不会去想学编程「并&b&不能&/b&做什么」。&br&&br&无奈大多数人过了一定年纪就很难再靠「我能指挥机器」这种简单原始的快乐来驱动自己学编程。见过世面,听过传言,欲望和野心变得复杂而庞大,你想要图形界面,音乐音效,人工智能,云端同步,可是你闷头学了几堂课,还是只学会在黑框里显示一串数字。你怀疑这是学 C 语言的错,于是你到知乎上来问了这个问题。&br&&br&你的疑惑是有道理的。&br&&br&如果能把编程学下去,日后你就会明白,任何程序都是一座冰山,最终用户能看到的界面和使用的功能,只是程序浮在水面上的十分之一。知乎这个网站其实也是个运行在某台电脑上的程序,你能看到的十分之一是用什么编写的呢?HTML,CSS,JavaScript,或者 Objective-C。而你看不到的那十分之九是用什么编写的呢?Python。这些你无法直接观测到的 Python 程序运行在世界某个角落的某些计算机上,隔着光缆、双绞线和无线基站,为你面前或掌上的用户界面注入生命。&br&&br&&figure&&img src=&https://pic3.zhimg.com/50/4e6cabdb54c15_b.jpg& data-rawwidth=&518& data-rawheight=&588& class=&origin_image zh-lightbox-thumb& width=&518& data-original=&https://pic3.zhimg.com/50/4e6cabdb54c15_r.jpg&&&/figure&( &a href=&//link.zhihu.com/?target=http%3A//xkcd.com/353/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&xkcd: Python&/a& )&br&&br&……可是 Python 是用什么编写的呢?C 语言(当然,这么说并不严谨,Python 理论上可以用任何其他语言实现,实际上也已经被用很多其他语言实现了,不过这并不是重点)。任何编程语言都是实现某个功能的工具,Python 实现了知乎这个网站的大部分功能,而 C 实现了「用 Python 写程序」这个功能。为什么是 C?&br&&br&&blockquote&C 很别扭又缺陷重重,却异常成功。固然有历史的巧合推波助澜,可也的确是因为它能满足对于这样一种系统实现语言的需要:既有相当的效率来取代汇编语言,且又足够地抽象而流畅,能够用于描述各种各样的环境之下的算法与交互。&br&&i&C is quirky, flawed, and an enormous success. Although accidents of history surely helped, it evidently satisfied a need for a system implementation language efficient enough to displace assembly language, yet sufficiently abstract and fluent to describe algorithms and interactions in a wide variety of environments.&/i&&br&——C 语言之父,Dennis M. Ritchie&/blockquote&&br&C 是初代程序员所使用的语言,那时候硬件很贵,软件必须高效;而计算机的用户都是职业程序员,对于硬件有足够的理解。C 贴近硬件,就意味着它容易译成机器能懂的语言,而它的设计者也并不需要操心普通人学起来可能会比较困难——而且,说真的,其实也不很难。但是,这么多年过去之后,软件规模变得越来越大,C 就像锤子和手锯,修小木屋得心应手,造摩天楼就比较力不从心;但 C 语言可以用来造出其他更适合建造摩天楼的工具,乃至组成摩天楼的预制件,就好比用锤子和手锯造出挖掘机和吊车、混凝土板和一体门窗一样(当然,这个类比并不十分贴切。可是没有什么类比能贴切地描述软件工程,因为软件工程像许多东西,却又什么东西都不像)。&br&&br&所以,回到你的问题上来,是的,学会 C 计算机语言真的可以开发出很多东西,但除非内力深厚,场合适当,并且闲得蛋疼,大多数人不会拿 C 或者只拿 C 来开发太大的东西。如果你只是想要一门能够让你「编辑出一个啥子游戏或者软件出来」的语言,而且你用 Windows,那建议你转去学学 C#。它长得和 C 挺像,但却能迅速地写出至少是带有图形界面的程序,用起来也很方便,鼠标点一点就能让你对自己的程序看起来什么样有个比较直观的印象。还有,在国内,C# 的教材也相当容易找到。当然 Python 也是一个很好的选择。&br&&br&&figure&&img src=&https://pic4.zhimg.com/50/601cf5b6adc3d883a8cc9e_b.jpg& data-rawwidth=&640& data-rawheight=&429& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic4.zhimg.com/50/601cf5b6adc3d883a8cc9e_r.jpg&&&/figure&&br&另外,还有一件事你必须弄明白:现代的所谓编程这一活动,其实大部分时候是在「合理地堆砌别人已经实现的功能来实现新的功能」,C 语言莫不如是,比如 printf 这个东西,是别人做出来的「把一些数据按照指定格式输出到屏幕上」这一功能。而别人还做出来许多其他功能,比如「在发现用户短时间内连续两次按下鼠标又松开的时候调用你写好的一个函数」。学会怎样在 C 或者其他任何程序语言中使用这些既有功能,也是学习编程的一门重头戏。等你弄明白这一点,你也就找到了你问题的答案。&br&&br&尾注1:题图画错了。马里奥身宽应为 16 像素,我画成了 17。&br&尾注2:NES 上的超级玛利奥使用 6502 汇编完成,并不是 C,碰撞检测也不是像素级的。&br&尾注3:我不是易语言发明者。
马里奥碰到花朵就变身。 什么是马里奥?一个装着 16 × 32 个小色块的长方形,其中一些色块填着颜色,另一些没有。什么是花?一个 16 × 16 的正方形。什么是「变身」?把马里奥这个方块里面代表衣服的褐色变成红色,代表背带裤的红色变成白色。什么是褐色…
&figure&&img src=&https://pic1.zhimg.com/v2-f66acbf361_b.jpg& data-rawwidth=&580& data-rawheight=&426& class=&origin_image zh-lightbox-thumb& width=&580& data-original=&https://pic1.zhimg.com/v2-f66acbf361_r.jpg&&&/figure&&blockquote&原答案&a href=&https://www.zhihu.com/question//answer/& class=&internal&&&span class=&invisible&&https://www.&/span&&span class=&visible&&zhihu.com/question/5297&/span&&span class=&invisible&&6889/answer/&/span&&span class=&ellipsis&&&/span&&/a&&/blockquote&&br&“每次改bug都只靠蒙”这个是很多编程入门的初学者都会遇到的问题——这篇文章将会对如何进行调试,做一个比较浅显的入门介绍。虽然你看完这篇文章之后,不见得就能一下子找到bug在哪,但是至少可以做到有的放矢,不至于完全只能随缘。&br&&br&对程序进行调试,一个最基本的思路,就是二分法——类似于算法中的二分查找,对于一个程序来说,其bug大多数情况下都只是集中在一个子模块里,我们通过二分法,&b&不断地把程序一分为二,排查缩小可能有问题的地方&/b&,这样一来调试的效率就比起“随缘法”和遍历法就高多了。&br&&br&这里使用Visual Studio 2015调试一个C++程序作为例子——其他语言和环境的方法是差不多的。如图所示:&br&&figure&&img src=&https://pic3.zhimg.com/v2-9035edaae9523a09fae78e1effb4193a_b.jpg& data-rawwidth=&495& data-rawheight=&798& class=&origin_image zh-lightbox-thumb& width=&495& data-original=&https://pic3.zhimg.com/v2-9035edaae9523a09fae78e1effb4193a_r.jpg&&&/figure&然后这个程序运行的时候会炸:&br&&figure&&img src=&https://pic3.zhimg.com/v2-1c47f44ab104dfef94304_b.jpg& data-rawwidth=&993& data-rawheight=&519& class=&origin_image zh-lightbox-thumb& width=&993& data-original=&https://pic3.zhimg.com/v2-1c47f44ab104dfef94304_r.jpg&&&/figure&这个时候我们就需要使用分治法来判断,程序到底是哪个部分出了问题了——这里我们采用一种虽然看起来“大力出奇迹”,十分简单粗暴,但是实际上却很有效,适用范围极广的方法:输出法。&br&比如对于上面这个程序,我们要判断程序里的两个for循环,到底是哪个出了问题——这个时候我们就可以通过添加一些额外的输出语句,作为标记。&br&比如对于上面的程序,我们可以在第16行添加以下代码:&br&&div class=&highlight&&&pre&&code class=&language-cpp&&&span&&/span&&span class=&n&&cout&/span&&span class=&o&&&&&/span&&span class=&s&&&part 1 finished&&/span&&span class=&o&&&&&/span&&span class=&n&&endl&/span&&span class=&p&&;&/span&
&/code&&/pre&&/div&然后运行的结果就是这样:&br&&figure&&img src=&https://pic2.zhimg.com/v2-29ffc16aaee_b.jpg& data-rawwidth=&993& data-rawheight=&519& class=&origin_image zh-lightbox-thumb& width=&993& data-original=&https://pic2.zhimg.com/v2-29ffc16aaee_r.jpg&&&/figure&我们可以看到,在炸之前,程序成功输出了这行标记——这就意味着,仅针对这个例子来看,第十六行之前的代码是没有问题的。进一步讲,如果程序逻辑更加复杂的话,你还可以输出特定的某些变量的值,看看这个变量的值是不是符合预期的。&br&这个时候,我们把注意力放在16行之后的代码上——对于如此小的代码块,我们已经可以直接用肉眼进行查错了。C++基础比较好的同学可以直接看出,这是一个典型的访问越界错误,向量v1现在只有n个元素,因此v1[n]是不存在的(大多数语言的数组索引都是左闭右开的,v1的最后一个元素索引是n-1),访问这个元素自然就会报错。&br&把i&=n的等号去掉,这个时候程序便能正确运行了:&br&&figure&&img src=&https://pic1.zhimg.com/v2-17ce142a8d840de67cded1_b.jpg& data-rawwidth=&1113& data-rawheight=&762& class=&origin_image zh-lightbox-thumb& width=&1113& data-original=&https://pic1.zhimg.com/v2-17ce142a8d840de67cded1_r.jpg&&&/figure&这种方法,不光适用于CLI程序,GUI程序也可以。比如用C#写WinForm的话,就是这样:&br&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&MessageBox.Show(&输出&);
&/code&&/pre&&/div&这样就可以输出你要的内容了——可以是一个标记,也可以是特定变量的值。&br&&br&当然,这种“大力出奇迹”的办法,只是权宜之计——接下来将会介绍如何使用调试器。&br&&br&首先让我们明确一个概念——“断点”。所谓“断点”是调试器提供的一个功能之一,它可以让你的程序执行到某个步骤的时候停下来,进入中断模式。此时程序既不会被终止,也不会继续执行——接下来你就可以通过调试器,控制程序的执行过程了。&br&这里我们还是以C++和Visual Studio 2015为例进行说明——&b&其他语言和其他环境都是类似的(虽然调试器可能不怎么好用),万变不离其宗&/b&。&br&&br&还是上面那个程序,在第十六行代码左边点一下,如图所示:&br&&figure&&img src=&https://pic2.zhimg.com/v2-e6a63dffec704e_b.jpg& data-rawwidth=&656& data-rawheight=&794& class=&origin_image zh-lightbox-thumb& width=&656& data-original=&https://pic2.zhimg.com/v2-e6a63dffec704e_r.jpg&&&/figure&点击运行,然后输入数字,接下来你就会看到程序停在了断点处:&br&&figure&&img src=&https://pic3.zhimg.com/v2-e21cce5fbbd2a5c9564e53_b.jpg& data-rawwidth=&1326& data-rawheight=&918& class=&origin_image zh-lightbox-thumb& width=&1326& data-original=&https://pic3.zhimg.com/v2-e21cce5fbbd2a5c9564e53_r.jpg&&&/figure&于是我们可以得出跟之前一样的结论——第十六行之前的程序是没有问题的。&br&接下来,点击“继续”,就可以让程序直接执行到下一个断点处(断点可以加不止一个),或者直接结束——同时,工具栏上有两个按钮,可以控制程序一步一步地往下运行,这样就可以更加精确地确认哪里有bug。&br&这篇先讲这些——关于调试器的更多功能,之后再介绍……&br&调试器一共有三个最为核心的功能:&b&单步调试、查看变量的值,以及查看调用栈&/b&。接下来将会对这三个功能,逐一进行介绍。&br&&br&首先让我们来看下查看变量的值——还是上面那个程序,点击放大,可以看到我们已经在下方的“局部变量”窗口,看到一些变量的值了。比如说,这里我们能看到n的值为10&br&&br&不光是简单变量,Visual Studio还允许我们查看更为复杂的成员变量的值——比如说,这里我们建立了一个vector,然后将0-9这10个数字都添加了进去。这个时候,我们直接点击旁边的箭头,就可以展开v1:&br&&figure&&img src=&https://pic4.zhimg.com/v2-b063bde8e632f41fbf9e516dc27799f1_b.jpg& data-rawwidth=&1016& data-rawheight=&243& class=&origin_image zh-lightbox-thumb& width=&1016& data-original=&https://pic4.zhimg.com/v2-b063bde8e632f41fbf9e516dc27799f1_r.jpg&&&/figure&这个时候,我们可以看到,展开之后,我们可以看到v1的详细信息——包括容量(capacity,这里我们可以看到STL默认分配了稍微大一点的空间),以及其中每一个元素的值。而我们自己定义的数组arr,因为还没有new,所以还不能访问。&br&&br&接下来,让我们把注意力放到上方的工具栏:&br&&figure&&img src=&https://pic3.zhimg.com/v2-2fd5e6ccd959a31d4e73_b.jpg& data-rawwidth=&714& data-rawheight=&260& class=&origin_image zh-lightbox-thumb& width=&714& data-original=&https://pic3.zhimg.com/v2-2fd5e6ccd959a31d4e73_r.jpg&&&/figure&Visual Studio提供了两个不同的按钮——逐过程(右侧)和逐语句(左侧)。所谓“逐过程”指的是如果接下来要执行的语句是一个函数(或者对象的成员)的话,那就直接执行整个函数,只看返回结果,而“逐语句”指的则是直接进入函数/对象的体内。因此,需要注意的是,&b&如果某个语句使用了标准库的某些方法或者运算符重载的话,那就不要使用“逐语句”,不然会钻进标准库的代码里,没有意义。&/b&&br&&figure&&img src=&https://pic2.zhimg.com/v2-14a9ee35e655df_b.jpg& data-rawwidth=&808& data-rawheight=&515& class=&origin_image zh-lightbox-thumb& width=&808& data-original=&https://pic2.zhimg.com/v2-14a9ee35e655df_r.jpg&&&/figure&可以看到,这是钻进了VC的库提供的new运算符的定义里。&br&&br&灵活利用单步调试功能,可以让你即使是不能直接用肉眼看出,也可以用“笨办法”找出bug——比如说,对于这个例子,我们使用单步调试,如下图所示:&br&&figure&&img src=&https://pic4.zhimg.com/v2-456ecf56c4bc7babb2bf99_b.jpg& data-rawwidth=&791& data-rawheight=&459& class=&origin_image zh-lightbox-thumb& width=&791& data-original=&https://pic4.zhimg.com/v2-456ecf56c4bc7babb2bf99_r.jpg&&&/figure&现在循环体已经执行完了10轮,此时i=9,我们继续执行:&br&&figure&&img src=&https://pic4.zhimg.com/v2-92eb2f66a8f16a99de7c_b.jpg& data-rawwidth=&621& data-rawheight=&349& class=&origin_image zh-lightbox-thumb& width=&621& data-original=&https://pic4.zhimg.com/v2-92eb2f66a8f16a99de7c_r.jpg&&&/figure&现在i变成10了,接下来一步就是执行赋值操作了,再往下走一步:&br&&figure&&img src=&https://pic3.zhimg.com/v2-0dd1cdd392c846cd7fde6c221a91f550_b.jpg& data-rawwidth=&478& data-rawheight=&375& class=&origin_image zh-lightbox-thumb& width=&478& data-original=&https://pic3.zhimg.com/v2-0dd1cdd392c846cd7fde6c221a91f550_r.jpg&&&/figure&现在我们已经可以精确定位到具体是哪一步出了错,修改起来自然就容易多了。&br&另外,初学者使用VS做练习的时候,经常会出现一个问题——VS的程序执行完之后,命令行窗口就直接消失了,看不到输出结果。利用调试功能,我们也可以有一个非常简单而又没有额外影响的方法来解决这个问题:把断点打在return 0;上——这样一来,当程序的主体部分完全执行完毕之后,就会自动停在结束前的最后一步(return 0;),然后你就可以看到完整的输出结果了。&br&&br&最后让我们来看一下函数调用栈查看功能的使用——首先,你要懂得什么是函数调用栈,这里我就不再废话了,不懂的直接去上我的课:&a href=&https://link.zhihu.com/?target=https%3A//www.jisuanke.com/course/cs112& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&C++ 程序设计 - 课程 - 计蒜客&/a&&br&&br&我们直接用这个图来举例——这是一个用递归法求阶乘的函数:&br&&figure&&img src=&https://pic3.zhimg.com/v2-b2c35dfff6d1cfdfb98ce343dd3854e7_b.jpg& data-rawwidth=&600& data-rawheight=&338& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic3.zhimg.com/v2-b2c35dfff6d1cfdfb98ce343dd3854e7_r.jpg&&&/figure&代码如下——我们直接停在fac(1)这一步:&br&&figure&&img src=&https://pic2.zhimg.com/v2-5e83b20cf6c03b87889f_b.jpg& data-rawwidth=&1322& data-rawheight=&875& class=&origin_image zh-lightbox-thumb& width=&1322& data-original=&https://pic2.zhimg.com/v2-5e83b20cf6c03b87889f_r.jpg&&&/figure&注意看右下角的调用堆栈窗口,我们可以看到现在调用栈里只有一个main()函数。然后继续往下执行,选择“逐语句”:&br&&figure&&img src=&https://pic4.zhimg.com/v2-baea6451_b.jpg& data-rawwidth=&424& data-rawheight=&217& class=&origin_image zh-lightbox-thumb& width=&424& data-original=&https://pic4.zhimg.com/v2-baea6451_r.jpg&&&/figure&&br&我们可以看到,有一个fac已经被放进了调用栈里——继续向下走:&br&&figure&&img src=&https://pic1.zhimg.com/v2-3b315a56def58bb311bf45bdd4ff540c_b.jpg& data-rawwidth=&619& data-rawheight=&209& class=&origin_image zh-lightbox-thumb& width=&619& data-original=&https://pic1.zhimg.com/v2-3b315a56def58bb311bf45bdd4ff540c_r.jpg&&&/figure&又有一个被放了进去——接下来该返回了:&br&&figure&&img src=&https://pic4.zhimg.com/v2-89af6e4ce06ef29cb56d58f0_b.jpg& data-rawwidth=&1174& data-rawheight=&422& class=&origin_image zh-lightbox-thumb& width=&1174& data-original=&https://pic4.zhimg.com/v2-89af6e4ce06ef29cb56d58f0_r.jpg&&&/figure&&br&一目了然。&br&&br&这些就是调试器最为主要的三个功能——对于其他语言和其他环境(例如gdb),虽然具体细节有所不同,但是核心的思路都是一样的,万变不离其宗。&br&以上就是这篇文章的主要内容——很惭愧,做了一点微小的贡献,谢谢大家。
原答案 “每次改bug都只靠蒙”这个是很多编程入门的初学者都会遇到的问题——这篇文章将会对如何进行调试,做一个比较浅显的入门介绍。虽然你看完这篇文章之后,不见得就能一下子找到bug在哪,但是至少可以做到有的放矢,不至于完全只…
某小猎来尝试回答这个问题,还请各位大牛多多指教。&br&&br&我是不太同意高票答案的一些观点的。那或许看上去很美很优雅,但并不是HR筛简历的真实情况。很多大学生或是年轻人总是会想着怎么样写好简历,字体怎么好看点?格式怎么好看点?排版怎么好看点?而作为一名每天要看上百份简历的人来说,我不得不和你们说一句:&br&&b&然而这并没有什么卵用。&/b&&br&我们有一项训练是如何在13秒内甄别一份简历是否合适,我算是看简历看得比较认真的,也不会多于30秒,实在纠结的,也不会纠结多余1分钟。而这1分钟内,我真心不会考虑你的格式漂不漂亮。尤其是现在绝大多数都是网站录入式简历了,大家的排版都是一样的。什么,你说放在附件里的那个?对不起,如果我不是怀疑网站录入时信息没保存完整,附件里的那个我根本不会点开。&br&&b&如果一定要我评价一份电子版简历的排版,那我唯一的要求是简洁大方,标点和分段正确,整篇简历除照片外不多于2种颜色,能让人看明白,不乱,在我这儿就过关了。至于有些HR非崇尚宋体贬低微软雅黑(我还见过专门喜欢微软雅黑的HR,不过人家也不会因为你用宋体就把你毙了),喜欢PDF贬损word(一个技术大牛因为用word你就把人毙了试试,老板分分钟pia飞你),这在我长期服务的两家世界500强公司都没有出现过这种情况。而那些一会儿一个图一会儿一个表的简历,那只是外行看着爽,我们看起来真心很累!&/b&&br&&br&因此不要过分看重简历的格式,更要注重充实简历的内容。如果你肚里没货但企图蒙混过关,那我真的帮不了你。但如果你肚里有货倒不出来,那我发表一点我个人的浅见,希望能对你有所帮助。&br&&br&&b&1、所有基本信息详尽如实。&/b&&br&基本信息分为三类:&br&1)学历背景:毕业院校、所学专业、入学和毕业年份、是否为统招统分,这四个信息一个都不能少。如果是本硕的学历,请不要漏写本科学历情况(很多人本科不好就不写了,拜托,这欲盖弥彰啊),同时注明硕士是全职还是在职的。&br&2)工作背景:就职公司、所任职位、起止年月、所在部门、手下人数、汇报对象。这些都是我们会考察的对象。&br&3)语言水平:就一点:会不会说英文!!!会不会说英文!!!能不能流利地说英文!!!!&br&如果会一点二外是加分的,但二外也无法弥补你英文不流利,就是酱。&br&基本上在13秒内我们要获取到的信息就是以上这些,这些是我们进行人员筛选的硬性条件,如果硬性条件不达标,软性再好也是没用哒。同时这些也应该是一份简历大体的框架。能做到以上内容之后,我们再来说说怎样润色简历使人眼前一亮。&br&&br&&b&2、有非常详尽的工作内容与工作业绩。&/b&&br&由于我自己是做互联网行业的,我就拿互联网最基本的程序员简历举例了哈。&br&以下是我从简历库里随便扒的:&br&&blockquote&1、java后台开发&br&2、部分前台页面编写&/blockquote&这在我眼里叫啥也没写。&br&&blockquote&1、作为一个java程序员,后台模块主要职责有:后台代码的编写、包括数据库操作、sql语句优化、wsdl技术调用接口、生成接口、编写接口文档、绘制流程图等&br&2、前台页面的实现。我主要是负责后台模块的,但是本身就会前台的一些技术,工作期间也学习了html5和css3的技术,所以在工作中也会帮助些实现前台的页面&br&3、git项目的管理。包括远程git仓库项目的创建与删除等、gitolite中项目操作权限的设置等。&/blockquote&这就好多了不是。&br&&blockquote&1. 参与设计Oracle的企业管理系统(ERP), 涉及到财务等模块的开发,熟练使用JAVA以及框架等技术,以及Oracle数据库PL/SQL。&br&&br&2. 研究并使用大数据相关的技术用于解决海量日志的分析,将数据存储到hadoop平台,然后将分析结果导入到Oracle数据库,通过Spring框架将结果进行展示。熟悉hadoop生态圈的各种开源技术如hdfs, MapReduce, Hive, Pig, HBase, 等。熟练使用Java语言编程和Linux脚本语言。&/blockquote&同学,我感觉你很吊嘛。&br&&br&如果你是个写Java的,我不仅想知道你会不会写Java,我还想知道你是怎么写的,在什么样的平台上?运用了哪些框架?相关配套技术有哪些?数据库有哪些?到底写了个什么东西?为谁写的?是给公司内部使用还是做甲方的项目?是负责架构设计还是模块开发还是后期的bug调试?除了Java还会别的么?我对你了解地越多,我就越能判断出你是不是适合应聘的职位,这对我们后期的沟通就越有效。&br&&br&&b&3、一定要有项目经历。&/b&&br&这是很多人忽略的地方。很多人觉得我只要把工作经历填写完整即可,是不用填写项目经历的。这是大错特错的!BAT中的某HR曾告诉过我:对于非高端职位的候选人,没有项目经历简历直接pass,因为他们不知道你究竟都干了些什么。&br&项目经历的意义在于,除了大家极其相似的工作经历,项目经历给了那些真正表现优秀的候选人一个很好地展现自我的机会。&br&你做过什么样的项目?给哪家公司做的?多大的体量?最终使用人群是多少?&br&你在项目中的角色是什么?是参与者还是组织者还是负责人?是负责前期客户需求沟通还是后期项目交付?达到了什么样的结果?客户对你的评价是什么?有提前完成项目的经历么?&br&这个项目给你带来的经验是什么?是否能够积累一定的行业资源?&br&&b&这只是我们从一个项目中就能分析出来的信息。&/b&&br&而多个项目组合起来来看,我们就能清晰地感知到候选人的主要客户主要base在哪些行业或是领域?都是什么样级别的客户?而他对话的人在甲方又是什么样level的?&br&这些,对于后期的沟通是一样重要的。所以你可以不写得这么详细(要不面试就没的问啦),但一定要写项目经历!&br&&br&&b&4、整体的职业经历要具有连贯性。&/b&&br&这个严格来说不是写简历的技巧,而是职业发展规划要做的工作。但这些最终还是要反映到简历上。&br&很简单,如果你做了15年的研发,我就默认为你的下一份工作还基本上应该是研发。如果你做了3年研发,然后转为架构,3年之后又转为售前,过几年又转为MKT,这是一个越来越向前端靠近的发展路径,那么我默认为你的下一份工作职责还是应该在销售、市场、售前这几个范畴。但如果你做了几年研发,然后又跑去做交付,紧接着干了售前,过两年又变成项目经理,不好意思,我无法判断你的之后想做什么,而这样的简历我也很难推荐给公司。&br&&b&因此各位一定要在换工作前对自己的职业发展规划有一个大体的认知,知道自己适合做什么,想做什么,怎么样能够达到,而不要仅仅因为工资上几千块的涨幅而盲目的跳槽,这牺牲的是你以后的发展机会!&/b&&br&有的人问那我做了15年的研发,我现在想干的别的了,怎么办呢?我的答案是寻求内部转岗的机会。一般对于绩效好的员工,公司都会给予一些转岗的机会或政策,或者你可以直接和你现在的上级领导来商谈,告诉他你的想法,看看他是否能够帮助你。在新职位上再做1-2年,再看新机会就不会有困难,否则外部公司不会花钱冒风险让一个新手来尝试不同的职责,尤其是年龄偏大的,30岁之下的是可以考虑的。&br&&br&&b&5、有一个清晰的自我评价和求职意向。&/b&&br&自我评价中”工作努力,与人为善,积极沟通“这样的评价请不要占主要部分,没有人会看的。我们想看的是&b&精通XXXX,熟悉XXXX,了解XXXX,对XXXX在XXXX环境下的XXXX有深入的认识。&/b&说白了,就是对你自己技能的一个总结。&br&&b&很简单,你说你能做,你不一定能做;你说你做不了,你肯定做不了。&/b&&br&至于爱好,你喜欢踢球还是游泳,喜欢看书还是听音乐,我们真的不在乎,我们想看到的是”逛技术论坛,读《Java基础入门》“(我编的)。&br&而至于求职意向,请说明你目前的兴趣点在哪里,想找个什么样公司的什么样的职位机会,为什么会应聘现在这个岗位,我们会很开心哦~&br&&br&最后,说个小tips:&b&请将简历名称命名为“应聘职位-姓名-毕业学校-现处公司-工作年限”&/b&,HR会感激你哒。&br&&br&最最后,告诉你们一个小秘密,以报答你们居然能看到这里:很多时候你们投过去的简历,尤其是投给大公司的简历,因为人家收的简历太多了,根本就不会每个都看。所以如果石沉大海不要泄气,不是你不够优秀,是你没被发现。怎样解决这个问题呢?请找已经在这个公司的人给你做内推,或是找猎头帮你推荐,这样的简历会被优先审阅。如果你没有这样的渠道,而你又对这个公司的职位非常感兴趣,请打电话给公司前台,转HR招聘部(有可能需要实名制转接),直接告诉他你是谁,应聘了哪个岗位,请她帮忙看一下,一般在工位上的HR都会登录系统帮你看的。如果你觉得这样可能打搅到她她会不高兴,尝试在linkedin上找到相应公司的某位负责招聘的HR,加她好友,给她发私信,总之把你的主动意向传达给她,她会高兴的。:-D&br&这听起来很厉害是不是?其实这招对中小型企业可以,对几万人的大公司是没用的。(别打脸!)因为公司体积太大,招聘都是以事业部的形式来进行,而一个这样的公司有几十个事业部,你能找到负责该部门该职位的HR的可能性微乎其微。那怎么办呢?&br&&b&你可以去linkedin上搜索你的目标公司里正在做你想做的事情的人,加他好友,给他发私信,让他帮你内推。他会同意的,因为内推成功是有奖励的,好几千呢!这被我称为暴力内推法,我原创的。^.^&/b&&br&&br&最最最后,我才发现这是一道去年的题,我不开心!!!!!!!!&br&&br&=================================================================&br&&br&6日更新:&br&我刚发现这个答案的收藏数比赞同数还要高出一大截。o( ̄ε ̄*)&br&那些默默收藏的人,你们把我放进“大牛”收藏夹的,我就兴高采烈地原谅你们了,放进“有用”的,我也能勉为其难原谅你们,那些放进“233”和“逗逼”收藏夹的,你们几个意思哎!ヾ(≧O≦)〃&br&&br&=================================================================&br&&br&8日更新:&br&这个答案能获得千赞真的大大出乎我的意料,我非常受宠若惊,感谢各位的厚爱。&br&上了知乎之后发现了非常多的大牛,相比之下我知道的真的太少太少,不过我以后也会努力写干货,把我知道的人力资源领域的经验分享给大家。&br&本答案开放转载授权,但转载前请私信告知并获得授权后再进行转载。&br&另外如果有其他个性问题也可以私信我,我会尽力回答。但是要微信号的就不必再私信我了,微信对于我来说还是比较私人的领地,暂时无法公开给大家,非常抱歉。&br&最后再次感谢各位的理解与支持!&br&====================================================================&br&&br&7月更新:&br&相关回答:&br&&a href=&http://www.zhihu.com/question//answer/& class=&internal&&如何优雅、机智地和新公司谈薪水? - 知乎用户的回答&/a&&br&&a href=&http://www.zhihu.com/question//answer/& class=&internal&&如何匹配职业和兴趣? - 知乎用户的回答&/a&
某小猎来尝试回答这个问题,还请各位大牛多多指教。 我是不太同意高票答案的一些观点的。那或许看上去很美很优雅,但并不是HR筛简历的真实情况。很多大学生或是年轻人总是会想着怎么样写好简历,字体怎么好看点?格式怎么好看点?排版怎么好看点?而作为一…
&figure&&img src=&https://pic3.zhimg.com/v2-bfa05efc28ebb961d8b0249_b.jpg& data-rawwidth=&1616& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1616& data-original=&https://pic3.zhimg.com/v2-bfa05efc28ebb961d8b0249_r.jpg&&&/figure&&h2&&b&简单和好看,两个都要&/b&&/h2&&p&想起来刚学Python的时候,学了很长时间还是在黑黑的窗口里输出字符,感觉很没劲。用Tkinter做了第一个GUI窗口时,虽然显示的都是“Hello,World”,却感觉这个要漂亮多了(肤浅!)。后来学Web开发,发现CSS真让人头疼,别人网站上的一个小效果就要查半天才能实现。简单和好看,总是走不到一起,直到发现了Bootstrap,世界美好了。&br&&/p&&p&学习初期,尽量把时间和精力放在实现后端功能上。可以多使用前端框架和库来减少劳动量,比如Bootstrap和jQuery。但也&b&要了解CSS和JavaScript&/b&,要不用起来也会有困难。等到有了时间,就好好补一下基础,避免过度依赖框架。&/p&&br&&br&&h2&&b&好看很重要&/b&&/h2&&p&长相天生,项目的外观却由你决定。尽管不是自己实现的效果,但看到自己的APP美观大方,你会不顾一切的在脑子里形成一个“&b&我创造了美好的事物&/b&”的念头,由此带来的巨大的成就感会激励你继续学习(和自恋)下去。而且,你的外行朋友们会对你一脸崇拜~&br&&/p&&p&我想大家对&a href=&http://link.zhihu.com/?target=http%3A//getbootstrap.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Bootstrap&/a&应该很熟悉了,但是因为它太流行了,很多人照着《Flask Web开发》做出来的博客从功能到外表,全都一个模样……&/p&&p&那么,我就来推荐三个不同风格的优秀的CSS框架。&/p&&br&&br&&h2&&b&Materialize —— &/b&&b&Material Design风格&/b&&/h2&&p&&a href=&http://link.zhihu.com/?target=http%3A//materializecss.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Documentation - Materialize&/a&&br&&/p&&p&Google(&a href=&http://link.zhihu.com/?target=https%3A//design.google.com& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&design.google.com&/span&&span class=&invisible&&&/span&&/a&)在2014年推出了一个设计语言——&a href=&http://link.zhihu.com/?target=https%3A//material.google.com/%23& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Material Design&/a&(译作“原质化设计”,“质感设计”或是“原质设计”),代号是Quantum Paper(量子纸)。看看下面这张图片你就明白了,这些卡片和圆形悬浮按钮你肯定不陌生:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-85a0fe888e86fafe388d_b.jpg& data-rawwidth=&4700& data-rawheight=&1400& class=&origin_image zh-lightbox-thumb& width=&4700& data-original=&https://pic2.zhimg.com/v2-85a0fe888e86fafe388d_r.jpg&&&/figure&&p&Materialize就是&b&基于&/b&&b&Material Design&/b&的CSS框架(同类的还有一个&a href=&http://link.zhihu.com/?target=http%3A//www.material-ui.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Material UI&/a&),使用它你可以轻松做出来很清新的页面效果。专栏下一个实践项目(&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&to-do list App&/a&)用的就是这个框架,我找来了另一个同样使用Flask做的to-do list App,做个简单对比:&/p&&p&这是使用Bootstrap的页面:&/p&&p&&figure&&img src=&https://pic1.zhimg.com/v2-bedcd13efc89b5fa7ee84cf4_b.png& data-rawwidth=&1856& data-rawheight=&930& class=&origin_image zh-lightbox-thumb& width=&1856& data-original=&https://pic1.zhimg.com/v2-bedcd13efc89b5fa7ee84cf4_r.jpg&&&/figure&这是使用Materialize的页面:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-ec6fed3ed2ddd_b.png& data-rawwidth=&1839& data-rawheight=&934& class=&origin_image zh-lightbox-thumb& width=&1839& data-original=&https://pic4.zhimg.com/v2-ec6fed3ed2ddd_r.jpg&&&/figure&另外,评论区知友&a href=&http://www.zhihu.com/people/caed275ccd59caadd2dd& data-hash=&caed275ccd59caadd2dd& class=&member_mention& data-title=&@刘二& data-editable=&true& data-hovercard=&p$b$caed275ccd59caadd2dd&&@刘二&/a&强烈推荐了Google自家的&a href=&http://link.zhihu.com/?target=https%3A//getmdl.io& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Material Design Lite&/a&。&br&&br&&h2&&b&Semantic-UI —— &/b&&b&语义化&/b&&/h2&&figure&&img src=&https://pic2.zhimg.com/v2-73bd8c5ca3bada9e8e40455_b.png& data-rawwidth=&1048& data-rawheight=&424& class=&origin_image zh-lightbox-thumb& width=&1048& data-original=&https://pic2.zhimg.com/v2-73bd8c5ca3bada9e8e40455_r.jpg&&&/figure&&p&&a href=&http://link.zhihu.com/?target=http%3A//semantic-ui.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Semantic UI&/a&&/p&&p&Semantic-UI是一个&b&语义化&/b&的前端框架,因为它是围绕自然语言架构的,所以使用起来也很方便。看看下面这个例子你就可以理解它的语义化特点了:&/p&&p&&figure&&img src=&https://pic2.zhimg.com/v2-6d648d3ed277bd29f1bc23d_b.png& data-rawwidth=&439& data-rawheight=&255& class=&origin_image zh-lightbox-thumb& width=&439& data-original=&https://pic2.zhimg.com/v2-6d648d3ed277bd29f1bc23d_r.jpg&&&/figure&再举个例子,在Bootstrap你想创建一个蓝色按钮,你需要这样:&/p&&div class=&highlight&&&pre&&code class=&language-html&&&span&&/span&&span class=&p&&&&/span&&span class=&nt&&button&/span& &span class=&na&&class&/span&&span class=&o&&=&/span&&span class=&s&&&btn btn-primary btn-large&&/span&&span class=&p&&&&/span&Hello!&span class=&p&&&/&/span&&span class=&nt&&button&/span&&span class=&p&&&&/span&
&/code&&/pre&&/div&&p&在Semantic-UI里,只需要这样:&/p&&br&&div class=&highlight&&&pre&&code class=&language-html&&&span&&/span&&span class=&p&&&&/span&&span class=&nt&&button&/span& &span class=&na&&class&/span&&span class=&o&&=&/span&&span class=&s&&&ui blue button large&&/span&&span class=&p&&&&/span&Hello!&span class=&p&&&/&/span&&span class=&nt&&button&/span&&span class=&p&&&&/span&
&/code&&/pre&&/div&&p&不光对搜索引擎友好,而且很容易理解和使用。&/p&&p&而且Semantic-UI的按钮很丰富:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-c92cfbd1f3ab35e3b7b59c96b1672e69_b.png& data-rawwidth=&1342& data-rawheight=&910& class=&origin_image zh-lightbox-thumb& width=&1342& data-original=&https://pic2.zhimg.com/v2-c92cfbd1f3ab35e3b7b59c96b1672e69_r.jpg&&&/figure&&br&&br&&h2&&b&Pure —— 轻量级&/b&&/h2&&figure&&img src=&https://pic3.zhimg.com/v2-f65c1428b28cdf879a9b3abeb86f2a4e_b.png& data-rawwidth=&1456& data-rawheight=&460& class=&origin_image zh-lightbox-thumb& width=&1456& data-original=&https://pic3.zhimg.com/v2-f65c1428b28cdf879a9b3abeb86f2a4e_r.jpg&&&/figure&&p&&a href=&http://link.zhihu.com/?target=http%3A//purecss.io/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Pure&/a&&br&&/p&&p&Bootstrap是Twitter推出的开源框架,而Pure是Yahoo!推出的开源框架。它的特点是&b&纯CSS实现,而且体积很小&/b&,整个框架压缩后只有5.7k左右。这是一个典型页面:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-a02f794e1a1e_b.png& data-rawwidth=&1840& data-rawheight=&987& class=&origin_image zh-lightbox-thumb& width=&1840& data-original=&https://pic1.zhimg.com/v2-a02f794e1a1e_r.jpg&&&/figure&&br&&p&如果你已经习惯了Bootstrap,不想尝试新东西,那么可以尝试基于Bootstrap的&a href=&http://link.zhihu.com/?target=http%3A//designmodo.github.io/Flat-UI/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Flat UI&/a&(扁平化UI工具包)和&a href=&http://link.zhihu.com/?target=https%3A//bootswatch.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Bootswatch&/a&(提供了各种Bootstrap主题)。&/p&&br&&br&&h2&&b&网页背景图片&/b&&/h2&&p&顺便推荐两个网页背景网站。&/p&&p&背景纹理:&a href=&http://link.zhihu.com/?target=https%3A//subtlepatterns.com/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&subtlepatterns.com/&/span&&span class=&invisible&&&/span&&/a&&br&&/p&&p&第一个网站提供了很多好看的纹理图片(数量更多和质量更好):&/p&&figure&&img src=&https://pic4.zhimg.com/v2-bfaf0fecd82d86c4d573f_b.png& data-rawwidth=&1259& data-rawheight=&988& class=&origin_image zh-lightbox-thumb& width=&1259& data-original=&https://pic4.zhimg.com/v2-bfaf0fecd82d86c4d573f_r.jpg&&&/figure&&br&&p&透明纹理+自定义颜色:&a href=&http://link.zhihu.com/?target=https%3A//www.transparenttextures.com/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&transparenttextures.com&/span&&span class=&invisible&&/&/span&&span class=&ellipsis&&&/span&&/a&&br&&/p&&p&后一个网站提供了很多透明纹理,你可以自定义背景颜色,且支持定制不同设备的壁纸:&br&&/p&&p&&figure&&img src=&https://pic4.zhimg.com/v2-dc798cce4bc13_b.png& data-rawwidth=&1000& data-rawheight=&690& class=&origin_image zh-lightbox-thumb& width=&1000& data-original=&https://pic4.zhimg.com/v2-dc798cce4bc13_r.jpg&&&/figure&二者均可免费下载。&/p&&br&&p&快动手让你的Web项目变漂亮一点吧,下次谈谈怎么让你的Web项目变得有趣起来。&br&&/p&&br&&p&- - - - -&/p&&p&更多关于Flask和Web开发的优质原创内容,欢迎关注&a href=&https://zhuanlan.zhihu.com/flask& class=&internal&&Hello, Flask! - 知乎专栏&/a&。&/p&
简单和好看,两个都要想起来刚学Python的时候,学了很长时间还是在黑黑的窗口里输出字符,感觉很没劲。用Tkinter做了第一个GUI窗口时,虽然显示的都是“Hello,World”,却感觉这个要漂亮多了(肤浅!)。后来学Web开发,发现CSS真让人头疼,别人网站上的一…
我也发点存货,不过已英文居多,见谅,有空就更新。&br&&br&&b&HTML:&/b&&br&&a href=&//link.zhihu.com/?target=http%3A//book.douban.com/subject//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&HTML & CSS设计与构建网站 (豆瓣)&/a&&br&&a href=&//link.zhihu.com/?target=http%3A//www.smashingmagazine.com/2012/04/a-new-front-end-methodology-bem/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&A New Front-End Methodology: BEM&/a&&br&&br&&b&CSS : &/b&&br&&a href=&//link.zhihu.com/?target=http%3A//css.doyoe.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CSS参考手册_web前端开发参考手册系列&/a&&br&&br&&b&视频:&/b&&br&&a href=&//link.zhihu.com/?target=https%3A//webdesign.tutsplus.com/courses/30-days-to-learn-html-css& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&webdesign.tutsplus.com/&/span&&span class=&invisible&&courses/30-days-to-learn-html-css&/span&&span class=&ellipsis&&&/span&&/a&&br&&a href=&//link.zhihu.com/?target=https%3A//www.udemy.com/build-website-scratch/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Build Websites from Scratch with HTML & CSS&/a&&br&&a href=&//link.zhihu.com/?target=https%3A//www.codeschool.com/paths/html-css& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&HTML/CSS - Code School&/a&&br&&br&&b&资源:&/b&&br&&a href=&//link.zhihu.com/?target=http%3A//tympanus.net/codrops/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Codrops | Useful resources and inspiration for creative minds&/a&&br&&a href=&//link.zhihu.com/?target=http%3A//jsbooks.revolunet.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&JSbooks - free javascript books&/a&
(里面也有HTML)&br&&a href=&//link.zhihu.com/?target=http%3A//it-ebooks-search.info/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&IT eBooks Info Search Engine&/a& (不清楚国内有没有封,能找到很多好书)&br&&a href=&//link.zhihu.com/?target=http%3A//www.smashingmagazine.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Smashing Magazine&/a&&br&&a href=&//link.zhihu.com/?target=https%3A//css-tricks.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CSS-Tricks&/a&&br&&a href=&//link.zhihu.com/?target=http%3A//www.sitepoint.com/html-css/html/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SitePoint HTML&/a&&br&&br&&b&自己的心得:&/b&&br&&a href=&http://www.zhihu.com/question//answer/& class=&internal&&写前端页面的时候,是先把html骨架写好再写css,还是一边写html,一边写css? - 嘟嘟老湿的回答&/a&
我也发点存货,不过已英文居多,见谅,有空就更新。 HTML:
列一下CSS学习资源吧:&br&&p&&b&基础篇&/b&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/article/1437& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CSS 最核心的几个概念&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/article/1186& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CSS 简写指南&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/article/2001& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CSS样式基础&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/article/2067& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CSS样式设置&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/article/2058& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CSS布局模型&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/article/2010& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CSS文字排版&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/article/2475& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&你不得不知道的CSS 字体那些事儿&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/article/2064& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CSS中的颜色值和长度值&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/article/2004& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CSS选择器分类&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/article/2787& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&30个你必须记住的CSS选择符&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/article/2031& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CSS元素分类&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/article/2799& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&浅谈CSS伪类分类&/a&&/p&&p&&b&进阶篇&/b&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/article/2442& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CSS 专业技巧收集&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/article/1845& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CSS小技巧&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/article/2061& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CSS代码优化&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/article/2007& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CSS的继承、层叠、特殊性和重要性&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/article/3030& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CSS 的使用中你可能不知道的 7 件事&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/article/1536& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Web 开发中 20 个很有用的 CSS 库&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/article/1334& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&11个学习CSS实用工具和资源&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/article/1247& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&17个有趣实用的CSS 3悬停效果教程&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/article/2181& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&前端笔试面试中的常用知识点总结(CSS)&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/article/1332& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&10个顶级的CSS UI开源框架&/a&&/p&&p&&b&实战篇&/b&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/article/2055& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&用CSS来找出两张图的差异&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/article/2979& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&用 CSS 3 来做个平安果吧~&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/article/2409& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&如何调试CSS动画&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/article/1245& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&用CSS制作Loading加载动画【第一期】&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/article/1258& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&用CSS制作Loading加载动画-Loading字样【第二期】&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/article/2439& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&帮助你美化网站的10+实用 CSS3 技巧&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/article/2163& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&30个使用CSS实现的loading等待加载效果&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/article/3273& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&慕课课程导航解析&/a&&/p&&p&&b&免费课程(视频)篇&/b&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/learn/315& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&重识CSS&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/learn/314& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CSS未来&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/learn/316& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&css框架的迷思&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/learn/319& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CSS与界面动效&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/learn/320& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CSS工作流&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/learn/57& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&如何用CSS进行网页布局&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/learn/473& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CSS3图片动态提示效果&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/learn/323& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Web Components中的CSS&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/learn/357& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CSS动画实用技巧&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/learn/9& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&HTML+CSS基础课程&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/learn/174& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&商城分类导航效果&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/learn/12& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&形形色色的下拉菜单&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/learn/6& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&导航条菜单的制作&/a&&/p&
列一下CSS学习资源吧: 基础篇进阶篇
&p&刚刚写了一个应季的回答&/p&&p&感兴趣的小伙伴去看看哈~&/p&&a href=&https://www.zhihu.com/question//answer/& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic2.zhimg.com/v2-b773b3b7a67d7468deb4d_ipico.jpg& data-image-width=&883& data-image-height=&883& class=&internal&&男生应该怎么穿衣服既低调又不俗气?&/a&&a href=&https://www.zhihu.com/question//answer/& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic4.zhimg.com/v2-faae1aa1a8a7b_120x160.jpg& data-image-width=&880& data-image-height=&1176& class=&internal&&男生夏天该如何搭配?&/a&&p&这大热的天 我竟然还更新了&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-be0a2cbbfafdae5c8d74c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&240& data-rawheight=&240& class=&content_image& width=&240&&&/figure&&hr&&p&尊重知友意见 出于稳妥先撤掉一家店
&/p&&p&等我什么时候再次购买了 再决定要不要扶他上去&/p&&p&另外也希望提意见的朋友可以私信我一下详细经历哈&/p&&p&我也不清楚到底买好了的是个例or买差的是个例&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-ed1baa8dab21b03fa211559_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1080& data-rawheight=&1920& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic4.zhimg.com/50/v2-ed1baa8dab21b03fa211559_r.jpg&&&/figure&&p&更新&/p&&p&本人在此&b&郑重承诺&/b&&/p&&p&&b&
不保证质量 !&/b&&/p&&p&&b&
不保证客服 !&/b&&/p&&p&&b&
不保证物流 !&/b&&/p&&p&&b&不要再说些奇奇怪怪的话了 想看图片看看图片就好 我把店铺名字也隐了 &/b&&/p&&p&&b&想了解店铺 就走淘口令自己去评价 &/b&&/p&&p&&b&我又不是店主 我咋保证哪天给你发货 保证衣服质量没问题?&/b&&/p&&p&&b&确实有过被哪家坑了的经历的 可以私信我详细过程 我会进行更改&/b&&/p&&p&&b&我还有自己的工作要做 私信态度好的不忙时候我都会回复 &/b&&/p&&p&&b&上来就指责我坑你了的 出门右转不谢!&/b&&/p&&p&&br&&/p&&hr&&p&更新&/p&&p&从12家最喜欢的店铺每家挑出一件代表作,大家挑选自己喜欢的去看哈!&/p&&p&想看完整推荐单的可以去关注我另外的一个回答,里面介绍的男装店铺比较全&/p&&a href=&https://www.zhihu.com/question//answer/& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic3.zhimg.com/v2-ae27b068b6d6ec33b0b396ebc585cbc2_120x160.jpg& data-image-width=&800& data-image-height=&1200& class=&internal&&淘宝上有哪些不low的男装店?&/a&&p&看完男装 有女朋友的也可以关注一下小仙女儿的穿搭哈&/p&&a href=&https://www.zhihu.com/question//answer/& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic4.zhimg.com/v2-bf44d81d2cdac864a97af3b_ipico.jpg& data-image-width=&800& data-image-height=&800& class=&internal&&淘宝上有哪些好看到爆的女装店?&/a&&a href=&https://www.zhihu.com/question//answer/& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic2.zhimg.com/v2-dd6ed9d1cb5_ipico.jpg& data-image-width=&1440& data-image-height=&1655& class=&internal&&在校女学生如何才能穿搭得低调又时尚呢?&/a&&p&穷学生党穿衣指南&/p&&a href=&https://www.zhihu.com/question//answer/& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic4.zhimg.com/v2-196a1a6b3fb2ce48de5f58ae9fd0de33_120x160.jpg& data-image-width=&800& data-image-height=&1200& class=&internal&&学生如何在淘宝上买到好看便宜质量好的衣服和鞋子?&/a&&p&更新 很多知乎朋友以为我在卖衣服 我没有哈 如果想一起交流的话也是可以加我的,不过一定要先点赞哈&br&&/p&&hr&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-a1dc40a44cdc18b1bfd84f5ade9025ad_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&800& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic2.zhimg.com/50/v2-a1dc40a44cdc18b1bfd84f5ade9025ad_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/50/v2-c4bed3eeacc73cb725d40ad631da821c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&800& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic3.zhimg.com/50/v2-c4bed3eeacc73cb725d40ad631da821c_r.jpg&&&/figure&&p&
EURXMSD0A9aS44EUR
&/p&&p&金牌卖家
棉麻面料&/p&&p& 男朋友说&b&舒适感&/b&可以打十二分&/p&&hr&&figure&&img src=&https://pic4.zhimg.com/50/v2-a1eb398676_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&800& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic4.zhimg.com/50/v2-a1eb398676_r.jpg&&&/figure&&figure&&img src=&https://pic2.zhimg.com/50/v2-6e4eb1c499afc8cd3c89e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&800& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic2.zhimg.com/50/v2-6e4eb1c499afc8cd3c89e_r.jpg&&&/figure&&p&
EURxhDJ0A9Xv6QEUR
&/p&&p&金牌卖家&/p&&p&最近上新了很多T恤 &/p&&p&质量和价格都很不错可以尽快入手 &/p&&p&抱着也很舒服&/p&&hr&&figure&&img src=&https://pic1.zhimg.com/50/v2-e5e9fcd3cea352b8cd288_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&800& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic1.zhimg.com/50/v2-e5e9fcd3cea352b8cd288_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/50/v2-c7e6752cbde8ffdda0db50e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&800& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic3.zhimg.com/50/v2-c7e6752cbde8ffdda0db50e_r.jpg&&&/figure&&p&
EURy9w20A92F4BEUR
&/p&&p&金牌卖家&/p&&p&裤子很不错质量看买家评价就行了&/p&&p&你肯定会回来点赞的&/p&&hr&&figure&&img src=&https://pic3.zhimg.com/50/v2-c192d3c5a705e6ad5c8fc_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&800& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic3.zhimg.com/50/v2-c192d3c5a705e6ad5c8fc_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/50/v2-b84ab121a2abc_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&800& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic4.zhimg.com/50/v2-b84ab121a2abc_r.jpg&&&/figure&&p&
EURnVl30A9dBZ4EUR
&/p&&p&九分裤真心不错料子很软 &/p&&p&舒适度一百昏&/p&&hr&&figure&&img src=&https://pic2.zhimg.com/50/v2-e5115af3abce59eecbdb26_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&800& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic2.zhimg.com/50/v2-e5115af3abce59eecbdb26_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/50/v2-f08b4a8c4eac32d4055f49_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&800& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic3.zhimg.com/50/v2-f08b4a8c4eac32d4055f49_r.jpg&&&/figure&&p&
EURm8ie0A9TE0pEUR&/p&&p&简直在我看到模特的第一眼就爱上了TA&/p&&p&小清新典范&/p&&p&少女心的偶像啊&/p&&hr&&figure&&img src=&https://pic4.zhimg.com/50/v2-6eef66bd3ec1af88cdd94_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&800& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic4.zhimg.com/50/v2-6eef66bd3ec1af88cdd94_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/50/v2-36c33f109c8ab2d5cbf4fa3_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&800& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic4.zhimg.com/50/v2-36c33f109c8ab2d5cbf4fa3_r.jpg&&&/figure&&p&
EURZLwa0A93KbEEUR
&/p&&p&&br&&/p&&p&Polo衫和小衬衫不错&/p&&p&T恤需要慎重&/p&&p&感觉就是两家店的质量&/p&&hr&&figure&&img src=&https://pic2.zhimg.com/50/v2-ebbd7b64ebadb536deb70e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&800& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic2.zhimg.com/50/v2-ebbd7b64ebadb536deb70e_r.jpg&&&/figure&&figure&&img src=&https://pic2.zhimg.com/50/v2-ddfacb3e77385_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&800& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic2.zhimg.com/50/v2-ddfacb3e77385_r.jpg&&&/figure&&p&
EUR1c4K0A9eLa9EUR
&/p&&p&请给我一杯冰阔落&/p&&p&风格简约但又不是大街爆款&/p&&p&基本可以告别撞衫&/p&&hr&&figure&&img src=&https://pic4.zhimg.com/50/v2-bd292b334da86a89b8434b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&800& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic4.zhimg.com/50/v2-bd292b334da86a89b8434b_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/50/v2-289ccb314d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&800& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic1.zhimg.com/50/v2-289ccb314d_r.jpg&&&/figure&&p&
EUR9o280A9VjISEUR
&/p&&p&慵慵懒懒的风格衣服透气性很好 &/p&&p&长袖也没有感觉到明显的热&/p&&hr&&figure&&img src=&https://pic3.zhimg.com/50/v2-ede0eb43c388e3a9cea7b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&883& data-rawheight=&883& class=&origin_image zh-lightbox-thumb& width=&883& data-original=&https://pic3.zhimg.com/50/v2-ede0eb43c388e3a9cea7b_r.jpg&&&/figure&&figure&&i

我要回帖

更多关于 元素为vector的数组 的文章

 

随机推荐